标题几乎解释了我的问题。我希望能够使用 C# 在每个像素的基础上读取和写入 JPEG 数据。
我在想一些类似于 CreateJPEG(x, y)
的东西,它会在内存中设置一个空白的 JPEG 图像,然后给我一个 JPEG 对象,然后像 >SetPixel(x, y, Color)
和 GetPixel(x, y)
后者将返回 Color
或类似的东西。然后,您可以调用 Apply()
或 Save()
方法,例如,将图像保存为标准的 JPEG 可读格式(最好带有压缩选项,但那是没有必要)。
我假设一些 C# 库或命名空间使这一切成为一个非常简单的过程,我只是想知道最好的方法。
最佳答案
看看 Bitmap
类(class)。对于除了操作单个像素之外的高级绘图,您还必须使用 Graphics
类。
var image = new Bitmap("foo.jpg");
var color = image.GetPixel(1, 2);
image.SetPixel(42, 42, Color.White);
image.Save("bar.jpg", ImageFormat.Jpeg);
正如 Lasse V. Karlsen 在他的回答中提到的那样,这不会真正操纵 JPEG 文件。 JPEG 文件将被解压缩,此图像数据将被更改,并在保存时根据更改后的图像数据创建一个新的 JPEG 文件。
这会降低图像质量,因为由于有损 JPEG 压缩的性质,即使重新压缩未更改的图像通常也不会产生位完全相同的 JPEG 文件。
有些操作无需解压和重新压缩即可对 JPEG 文件执行 - 例如旋转 90° - 对单个像素的操作不属于此类。
关于c# - 如何以像素为单位读写 JPEG 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3193104/