将多维数组转换为灰度图像c#

问题描述

我创建了一个程序,该程序生成一个 256x256 矩阵,其随机元素值范围为 0-255。我想将其显示为灰度图像。我相当确定我需要初始化位图才能显示图像,但是图像没有颜色值,只有随机初始化为矩阵元素的强度值。

public static int[,] generateMatrix(int size = 256)
        {
            System.Random random = new System.Random();
            
            int[,] matrix = new int[256,256];
            
            for(int i=0; i<256; i++)
            {
                for(int j=0; j<256; j++)
                {
                    matrix[i,j] = random.Next(0,255);
                }
            }
            
            return matrix;
        }

如果不需要每个像素的单独 RGB 值,我将如何将此矩阵转换为位图并进一步转换为灰度图像?在此先感谢任何可以提供帮助的人。

解决方法

所以在摆弄它之后,我这样做了

public ActionResult GenerateQrCode(string data)
{
    var arraySize = 256;
    Bitmap grayScaleImage = new Bitmap(arraySize,arraySize);
    var generatedMatrix = GenerateMatrix(arraySize);
    for (int i = 0; i < arraySize; i++)
    {
        for (int j = 0; j < arraySize; j++)
        {
            var value = generatedMatrix[i,j];
            grayScaleImage.SetPixel(i,j,Color.FromArgb(value,value,value));
        }
    }


    byte[] byteArray = ConvertToByteArray(grayScaleImage);
    return File(byteArray,"image/png");
}

private static byte[] ConvertToByteArray(Image img)
{
    using (var stream = new MemoryStream())
    {
        img.Save(stream,System.Drawing.Imaging.ImageFormat.Png);
        return stream.ToArray();
    }
}

现在如果你不喜欢传递 value 三次,那么我建议扩展 Color 类并编写你自己的方法