从字节数组导出像素颜色值

时间:2018-11-02 15:03:10

标签: c# image-processing

我以前在C#中对成像工作不多,并且对它传递15x15 png时imageData字节数组中的值感到困惑。我希望有225个数组元素(或者更多,因为每个像素都有一个r,g,b,a值?),但是它只有124个。

我得到的124个元素是什么?另外,我希望能够确定每个像素的颜色。是否可以从字节数组中给出的数据中执行此操作,或者在C#中是否有完全更好的方法来执行此操作?

谢谢

Spec

1 个答案:

答案 0 :(得分:2)

PNG文件实际上非常复杂,我不建议您在不使用专门的库的情况下尝试读取它们。您得到的字节数少于预期的原因是因为信息已压缩,必须进行解压缩才能访问完整信息。此外,PNG格式比每个像素的颜色值列表还要复杂。

我会推荐两件事:

1)您可以在此处查看完整的PNG规范:https://www.w3.org/TR/2003/REC-PNG-20031110/

它将非常详细地解释理解PNG文件所需的所有步骤,并可能使您相信,由于要进行大量工作,最好使用库或内置功能来处理文件。

2)如果您确实想获取图像的低级视图,请考虑使用位图。这是一种更为简单的格式,因此可以轻松编写自己的解析器。否则,您应该只使用其他人的代码来管理加载PNG文件。您可以在以下位置找到有关BMP格式的信息:https://docs.microsoft.com/en-us/windows/desktop/gdi/bitmap-storage

对于其他加载文件的方法,搜索堆栈溢出以C#加载图像,还有很多其他主题(例如Reading a PNG image file in .Net 2.0