问题描述
我创建了一个程序,该程序生成一个 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 类并编写你自己的方法