在 C# 中将 24 位 BMP 转换为单色位



我将如何获取24位的BMP并将其转换为单色位图? 我不担心失去颜色等,也不想使用其他文件格式。

基本上有两种方法。可以使用互操作方法读取原始 BMP 数据,并为单色位图写入原始 BMP 数据。有一些可谷歌的函数可以做到这一点。

或者,更好的是,您可以使用ImageMagickObject使用随机抖动来转换图像。

做第二个。

如果你做第一个,你仍然应该使用随机抖动,但你必须手动实现它。

编辑:您问"以下RGB值变成了什么"...答案是他们成为你想要他们成为的样子。你决定。

显而易见的选择是使用严格的阈值,其中小于 X 的任何值都变为黑色,任何大于 X 的阈值都变为白色,或者您可以使用随机抖动。选择两个阈值,黑色阈值bt和白色阈值wt,以便0 < bt < wt < 255。然后为每个点选择一个介于 0.0 之间的随机数q。和 1.0。比较像素亮度((r+g+b)/3)与(q*(wt-bt)+bt)。如果它大于或相等,则为白色,如果小于,则为黑色。这将为您提供一个很好的抖动灰度。在大多数情况下,31 和 224 是 bt 和 wt 的良好值,但对于摄影图像,0 和 255 可能更好。

最新更新