我正在使用 c sharp,.net 4(客户端配置文件,如果这很重要)并且我有一个byte
包含图像原始数据的数组。具体来说,这张图片:
它是 SANE 测试后端的输出,格式在SANE 网站上有完整描述。顺便说一句,我已经传入了参数:
- 深度:8
- 模式:彩色
它已经返回:
- 格式:RGB
- 深度:8
- 行数:196
- 每行像素:157
- 每行字节数:471
- 一个 92316 字节长的字节流
因此,这些数字似乎是合理的 (196 * (157 * 471) = 92316) - 每个像素三个字节(24 位)。
通过阅读 SANE 文档,数据从左上角从左到右,从上到下按每个像素三个字节进行排序 - 就像这样(他们有更好的图片,对不起这种 ASCIItastic 方法):
red,green,blue red,green,blue
-------------- --------------
byte 1 byte 2 ...
因为我对图像非常了解,所以我认为将它加载到位图中会非常简单,我敲了这个:
var bmp = new Bitmap(157, 196, PixelFormat.Format24bppRgb);
BitmapData bmpData = bmp
.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height),
ImageLockMode.ReadWrite,
bmp.PixelFormat);
Marshal.Copy(data, 0, bmpData.Scan0, data.Length);
bmp.UnlockBits(bmpData);
但它产生了这个:
关闭,但没有雪茄,可以这么说。
那么,我做错了什么?