问题描述
我已设法使用 Bitmap.LockBits
从位图实例中提取像素信息。 PixelFormat
是 Format48bppRbg
,根据我对上述问题的理解和 Peter's answer,它应该使用两个字节来存储每个像素的 RGB 颜色通道。字节的组合值应等于 0 到 8192 之间的数字,代表 RBG 通道强度值。该值是通过将两个字节传递给 BitConverter.ToUInt16
方法获得的。
因此在提取以下 3 x 3 位图的像素信息时(为了清晰起见,此处放大了):
我的第一行像素通道是这样的:
像素颜色 | 红色强度 | 绿色强度 | 蓝色强度 |
---|---|---|---|
红色 | 8192 | 0 | 0 |
绿色 | 0 | 8192 | 0 |
蓝色 | 0 | 0 | 8192 |
到目前为止一切顺利。
然而,在第二行,它是这样的:
像素颜色 | 红色强度 | 绿色强度 | 蓝色强度 |
---|---|---|---|
白色 | 8192 | 8192 | 8192 |
灰色 (!) | 1768 (!) | 1768 (!) | 1768 (!) |
黑色 | 0 | 0 | 0 |
白色和黑色像素通道值对我来说很有意义。
然而,灰色没有。
如果你在上面的灰色像素上使用任何颜色选择器,你应该得到一个完美的中等灰色。在 24 位颜色中,它应该等效于 (R: 128,G: 128,B: 128) 或十六进制形式的 #808080。
那么为什么在 Format48bppRpg
像素格式中,通道强度远低于预期的中间 4096 值?这个基于 GDI+ 的 0-8192 范围不应该像它的 8 位对应物一样工作,0 是最低强度,8192 是最高强度吗?我在这里错过了什么?
作为参考,这里是来自 Visual Studio
调试器的屏幕截图,显示了原始字节索引和值,以及关于步幅、通道位置和它们提取的强度值的附加说明,直到灰色像素:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)