已经有很多.NET提供的类和函数来处理包括PNG在内的图像。比如Image, Bitmap, etc. classes。假设,我不想使用这些类。
如果我想手动读取/写入PNG图像作为一个二进制文件与像素工作,那么我该怎么做呢?
using(FileStream fr = new FileStream(fileName, FileMode.Open))
{
using (BinaryReader br = new BinaryReader(fr))
{
imagesBytes= br.ReadBytes((int)fr.Length);
}
}
我怎样才能获得单个像素来操作它们?
3条答案
按热度按时间zsohkypk1#
最简单的方法是使用
ReadAllBytes
和WriteAllBytes
函数:z31licg02#
将图像转换为byte[]数组:
将byte[]数组转换为Image:
如果您想使用Pixels,请按以下方式操作:
ikfrs5lh3#
虽然现在讨论这个主题可能有点晚了,但我想和大家分享一下,我从这篇文章中得到了启发,并用C#编写了自己的程序来访问PNG图像的像素。
但是,与BMP格式不同,PNG文件中的像素是用不同的算法压缩的,以减少其大小。我花了几个月的时间去浏览维基百科关于这个主题的文档,我必须承认我被信息淹没了,放弃了一段时间。
有了.NET Core,我建议你去看看一些在线存储库或库,以弄清楚如何访问PNG文件中的像素。因为有这么多的库是用来在服务器中存储图像的。所以它们将是一个读取像素数组的库。
因此,对于初学者,您需要读取打开图像作为流。
或者你可以直接把整个图像载入内存
然后你需要将它们切片成字节,并将这些切片转换成人类可读的数据。但我建议你首先通过这个Link。了解png文件中的内容。然后编写代码。到目前为止,我已经通过我的旅程了解到你正在寻找的是IDAT头。但真实的的问题是当你必须将其解码成实际像素时。这是因为不同的算法用于压缩。所以祝你好运,如果你继续png阅读和仓库应该给予你一个良好的开端。
或者你可以检查SixLabors.ImageSharp库。