c# - 如何以像素为单位读写 JPEG 数据?

标签 c# jpeg

标题几乎解释了我的问题。我希望能够使用 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/

相关文章:

javascript - 为什么我的过载 Controller 方法不能正确命中?

c# - Linq 查询从列表列表中获取对象

node.js - nodejs 夏普 : transparent into white

image - 同一图片在不同浏览器中显示不同

excel - 调整 MailItem 中粘贴的 JPEG 的大小

python从原始数据创建jpg文件

c# - 如何以编程方式在 C# 的 Excel 单元格中插入新行?

c# - sqlite-net 中的 SqliteDataReader 在哪里?

c# - 在 C# 中将数据表转换为 JSON

c - EXIF 数据类型解释