Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从字节数组创建位图_C#_Image Processing_Bitmap - Fatal编程技术网

C# 从字节数组创建位图

C# 从字节数组创建位图,c#,image-processing,bitmap,C#,Image Processing,Bitmap,我有一个扫描仪,可以提供灰度8位图像。我的目标是将这个图像转换成单色,我已经实现了。要转换,我需要对位图对象进行操作,而不仅仅是字节数组。我从字节数组获取位图的代码如下所示: public static Bitmap ByteArrayToBitmap(byte[] data, int width, int height) { Bitmap bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed); Bitm

我有一个扫描仪,可以提供灰度8位图像。我的目标是将这个图像转换成单色,我已经实现了。要转换,我需要对位图对象进行操作,而不仅仅是字节数组。我从字节数组获取位图的代码如下所示:

 public static Bitmap ByteArrayToBitmap(byte[] data, int width, int height)
 {
    Bitmap bmp = new Bitmap(width, height, PixelFormat.Format8bppIndexed);
    BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0, bmp.Width, bmp.Height), ImageLockMode.WriteOnly, bmp.PixelFormat);
    Marshal.Copy(data, 0, bmpData.Scan0, data.Length);
    bmp.UnlockBits(bmpData);
    bmp.Save(@"C:\Type7Test\TestImage.bmp", ImageFormat.Bmp);

    return bmp;
 }
我的问题是,从这一点上看,位图的格式是错误的。注意我将位图保存到磁盘的那一行(仅用于测试),结果如下:

正如您所看到的,这不是预期的图像。我预计结果是:


我怀疑
像素格式和位图的创建有问题那么,有人能给我指出正确的方向,从一系列原始图像数据创建一个正确的位图吗?

仔细考虑后,你确定
PixelFormat.format8bpindexed
是正确的格式吗?创建位图后,它或多或少看起来像所需的图像。这表明你为一张图片提供了太多或太少的数据,这意味着你的
像素格式可能是错误的


您可以尝试使用不同的类型进行试验,并检查哪种类型有效。他们很谨慎,这取决于图像的颜色(颜色越多,所需的每像素比特率越大)。

这看起来很相似-预期输出的宽度是结果的两倍,例如在徽标处。从何处获取宽度+高度值?您是否尝试过
格式化4bppindexed
?扫描仪输出是否存储在文件中?对于原始像素数据,您需要知道其格式。或者可能是数据已格式化且
未定义
DontCare
可以吗??(只是猜测)@TaW我试过使用DontCare和Undefined,但它不起作用。宽度和高度值存储在调用此方法的对象中。需要指出的是,DPI的大小是固定的300。只是检查一下,但是您确定
data
数组中的数据填充/处理正确吗?通过更改
for
循环中的参数,可以轻松地“偏移”图像。我假设您迭代一维(通常是高度),并使用偏移访问像素的每个颜色分量。该图像看起来太“数学变形”,不可能是“保存到磁盘”相关问题。DPI可能与此无关。我将使用十六进制编辑器查看这些字节值,并尝试确定它们的格式。再一次:宽度+高度值起源于何处?是你告诉扫描仪的吗?该标志的直径约为133px,但在您的结果中约为200px。这听起来像是将2字节解释为3字节,就像使用24位格式而不是16位格式。但那不是你告诉我们的。。总尺寸是多少?大的黄色条纹也很奇怪;也没有什么东西看起来像彩色桌子。请随时通知我们