我需要将从文件加载的PNG图像转换为另一个设备使用的每像素8位字节数组(嵌入式编程)。
我正在逐个像素地复制到使用16位颜色创建的新图像 - Format16bppRgb565
,但我需要Format8bpp
,这在.NET Framework中不存在。 (我无法使用Format8bppIndexed
,因为其他设备无法处理索引位图)
Bitmap img = new Bitmap(imgPath);
Bitmap img8 = new Bitmap(imgW, imgH, PixelFormat.Format16bppRgb565);
for (int I = 0; I <= img.Width - 1; I++) {
for (int J = 0; J <= img.Height - 1; J++) {
img8.SetPixel(I, J, img.GetPixel(I, J));
}
}
那么如何将Image转换为每像素8位字节数组呢?
Format8bppIndexed
答案 0 :(得分:1)
虽然我不确定如何使用普通的C#,你可以使用FreeImage Project库来转换图像格式:
FreeImage是一个开源库 希望开发人员的项目 支持流行的图形图像 格式如PNG,BMP,JPEG,TIFF和 今天的多媒体所需的其他人 应用。 FreeImage很容易 使用,快速,多线程安全, 与所有32位版本兼容 Windows和跨平台(工作 Linux和Mac OS X都有。)
它是用C ++编写的,但是你可以使用很好的.NET包装器。
答案 1 :(得分:0)
我已经在一个模式识别项目中完成了它。搜索一些图像处理和模式识别书籍,您可以找到这些解决方案。
a)如果您想转换为灰度,您通常可以找到两种解决方案。
#1 平均RGB通道。 - 您可以为每个通道获取8位值并计算像素=(R + G + B)/ 3
#2 仅使用绿色组件。最好看。
b)如果要转换为8位颜色表示,则需要使用颜色表。 您可以在此处查看解决方案http://www.codeproject.com/KB/graphics/Image_Bitdepth_Conversion.aspx