【发布时间】:2019-10-25 03:20:40
【问题描述】:
我正在使用此代码将位图保存为二进制数据。
Bitmap bmp = new Bitmap(screenWidth, position);
Graphics g = Graphics.FromImage(bmp);
g.CopyFromScreen(screenLeft, screenTop, 0, 0, bmp.Size);
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
System.Drawing.Imaging.BitmapData bmpData = bmp.LockBits(rect, System.Drawing.Imaging.ImageLockMode.ReadOnly, bmp.PixelFormat);
IntPtr ptr = bmpData.Scan0;
int bytes = bmpData.Stride * bmp.Height;
byte[] rgbValues = new byte[bytes];
System.Runtime.InteropServices.Marshal.Copy(ptr, rgbValues, 0, bytes);
bmp.UnlockBits(bmpData);
File.WriteAllBytes(filename, bmp);
g.Dispose();
由于我只需要第一个通道的值,是否可以从位图中检索它?性能至关重要。
【问题讨论】:
-
不确定
File.WriteAllBytes(filename, bmp);应该如何工作; bmp 是位图对象,不是字节数组。 -
查看标记为重复的许多现有 Stack Overflow 问题之一,并提供解释如何从位图中提取单个颜色通道 (RGBA) 的答案。
-
@PeterDuniho 不过,这有点奇怪;它结合了优化的
BitmapData技术和超慢的SetPixel技术。而且,由于我在此处的回答中提到的原因,它会在任何不是 32bpp ARGB 的输入上崩溃并烧毁。
标签: c# .net bitmap system.drawing color-channel