首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PixelFormat转换故障

PixelFormat转换故障
EN

Stack Overflow用户
提问于 2013-04-07 06:34:16
回答 1查看 414关注 0票数 0

这是我的密码:

代码语言:javascript
复制
BitmapData bmpData = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.ReadWrite, PixelFormat.Format24bppRgb);
UnmanagedImage img = new UnmanagedImage(bmpData);
//MAIN BLOCK
BayerDithering filter = new BayerDithering();
img = new UnmanagedImage(img.ImageData, img.Width, img.Height, img.Stride, PixelFormat.Format8bppIndexed);
filter.ApplyInPlace(img);
//END MAIN BLOCK
bitmap.UnlockBits(bmpData);

这是结果:屏幕截图

为什么结果不是合二为一的?我必须在“主块”中只更改吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-07 13:12:26

代码语言:javascript
复制
img = new UnmanagedImage(..., img.Stride, PixelFormat.Format8bppIndexed);

这就是问题开始的原因。您正在传递像素数据和24 8bpp图像的步幅,但却撒谎说这是8bpp图像。结果仍然是一个24 and图像和一个彻底混乱的过滤器。

这是行不通的,从24bpp到8bpp的转换要复杂得多。8bpp图像不仅有不同的像素格式和步幅,它还需要一个颜色表(又名调色板)。创建一个好的颜色表的256种颜色,产生一个合理匹配的8bpp图像是困难的。

您需要AForge.Imaging.ColorReduction命名空间中的一个类来完成这项工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15859642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档