【发布时间】:2014-07-06 12:32:39
【问题描述】:
我正在尝试通过 tcp/ip 连接发送位图。到目前为止,我的程序可以正常工作。但在调试过程中,我发现我的位图字节 [] 有一个奇怪的值。
我打开一个 24 位的位图并将其转换为 16 位。位图是 800x600,所以 byte[] 长度应该是 800*800*2Byte = 960000Byte... 但我的数组是 960054...
额外的字节从哪里来??
Console.WriteLine("Bitmap auf 16Bit anpassen...\n");
Rectangle r = new Rectangle(0,0,bitmap_o.Width, bitmap_o.Height);
Bitmap bitmap_n = bitmap_o.Clone(r, PixelFormat.Format16bppRgb555);
bitmap_n.Save("test2.bmp");
Console.WriteLine("Neue Bitmap-Eigenschaften:");
Console.WriteLine(bitmap_n.Width.ToString());
Console.WriteLine(bitmap_n.Height.ToString());
Console.WriteLine(bitmap_n.PixelFormat.ToString());
byte[] data = new byte[0];
MemoryStream mem_stream = new MemoryStream();
bitmap_n.Save(mem_stream, ImageFormat.Bmp);
data = mem_stream.ToArray();
mem_stream.Close();
Console.WriteLine(data.Length.ToString());
stream.Write(data, 0, 960000);
Console.WriteLine("Sending data...");
【问题讨论】:
-
如果你看一下 BITMAP 文件格式,很明显你不应该只计算像素en.wikipedia.org/wiki/BMP_file_format
-
@Steve,您应该将其发布为答案。
-
只是吹毛求疵:空字节数组
byte[] data = new byte[0];的实例化是多余的。 (嗯,它没有负面的副作用,但它也没有任何好处......)。摆脱它,然后做byte[] data;。也不要使用流 + stream.Close() 而是使用using (MemoryStream mem_stream = ...) { ...do stuff with stream... }- using 语句确保流在 using 阻塞时及时关闭正在离开... -
有吹毛求疵,然后有好的建议。 +1 位于右侧
标签: c# bitmap memorystream