【发布时间】:2021-11-17 22:32:45
【问题描述】:
我编写了一些代码来将字节数组显示为图像。有一个字节数组,其中每个元素代表一个 8 位灰度图像的值。 0 代表最黑的像素,255 代表最白的像素。我的目标是将这个 w*w-pixel 灰度图像转换为pictureBox1.Image 接受的东西。
这是我的代码:
namespace ShowRawImage
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
int i = 0, j = 0, w = 256;
byte[] rawIm = new byte[256 * 256];
for(i = 0; i < w; ++i)
{
for (j = 0; j < w; ++j)
{
rawIm[i * w + j] = (byte)j; // BitConverter.GetBytes(j);
}
}
MemoryStream mStream = new MemoryStream();
mStream.Write(rawIm, 0, Convert.ToInt32(rawIm.Length));
Bitmap bm = new Bitmap(mStream, false);// the error occurs here
mStream.Dispose();
pictureBox1.Image = bm;
}
}
}
但是我得到这个错误:
参数无效。
The error snapshot
我的错在哪里?
编辑: 在下一步中,我将显示 16 位灰度图像。
【问题讨论】:
-
查看此处显示的位图构建器方法:How to make colors in a Palette transparent when drawing 8bpp Bitmaps(第一个 sn-p)使用索引调色板。您当然可以使用不同的 PixelFormat。
-
倒回流——另外,您没有正确构建图像。通常需要设置标题来描述图像内容。甚至可能是一个调色板。
-
帖子中显示的代码没有多大意义,因为位图不是字节的随机集合......也不清楚你的实际目标是什么 - 一般的“字节数组”不是“一个图像” - 所以一些 edit 来澄清你需要实现的目标会很好。
-
位图不仅仅是一个数组,它还有header。在最简单的情况下,您可以创建所需大小的位图,然后在其上放置像素。
-
为什么不直接获取图片框的图形并绘制像素..?