【发布时间】:2010-12-16 02:12:50
【问题描述】:
不幸的是,我在当前项目中无法使用 C#,所以我必须在没有 unsafe 关键字的情况下解决这个问题。
我有一个位图,我需要直接访问像素和通道值。我想超越 Marshal.ReadByte() 和 Marshal.WriteByte()(肯定超越 GetPixel 和 SetPixel)。
有没有办法将位图的所有像素数据放入一个可在 32 位和 64 位系统上工作的字节数组中?我想要与原始位图完全相同的布局,因此还需要包括每一行的填充(如果存在)。
元帅似乎没有类似的东西:
byte[] ReadBytes(IntPtr start, int offset, int count)
除非我完全错过了......
非常感谢任何帮助, 大卫
ps。到目前为止,我所有的图像都是 32BppPArgb 像素格式。
【问题讨论】:
-
只是要明确一点:数据当前在内存中的情况如何?你能将它加载到 System.Drawing.BitMap 中,还是通过 MemoryStream 加载?
-
@Joel,它存储为常规的 Drawing.Bitmap,很可能是使用 GDI+ 图形对象从头开始生成的。
-
绝对准确地说,在 99% 的情况下,它将是在资源中存储为 32BppArgb 位图的图像。该图像被绘制到相同尺寸的空白 32BppPArgb 位图上,因为它必须经常被显示在屏幕上。图像通常很小(24x24 像素),但我需要处理数百个,因此需要超快速访问...
标签: vb.net memory bitmap marshalling bytearray