C#: 分部保存JPG文件

6
我目前正在开发一个C#开源的照片马赛克软件(Sourceforge链接)。该软件将大量小照片(瓦片)拼接成一张大图像。
由于最终图像的大小通常为20k像素乘以15k像素,因此我只保存了如何在内存中排列瓦片的映射。要构建最终图像,我将其分段构建,即按8行(也可以是其他数字)的带子。
对于BMP格式来说,这些数据可以很容易地按块保存,首先写入BMP文件头,然后将ARGB数据附加到该文件中。
但是,生成的BMP图像太大,无法进行进一步处理(例如交给海报印刷公司)。因此,我想将这些大图像保存为我的硬盘上的JPG格式。
现在的问题是,由于JPG格式是压缩的,按块写入数据似乎非常棘手(普通的Bitmap.Save()函数会先将整个图像加载到内存中,因此不适用),因为写入纯的未压缩的RGB数据是不可行的。
写入JPG格式的基本功能应该已经存在,因为据我所知,JPG的压缩算法使用8x8像素的块。我查看了几个图像库(FreeImage、GraphicsMagick、LibTiff.NET),以寻找解决此问题的方法,但没有找到。LibTiff基本上具有所需的功能,但仅适用于tiff图像格式。
非常感谢您的帮助! Max
1个回答

1

由于您没有提到OpenJPEG库,我认为您可能错过了它。

http://www.openjpeg.org/

当然,你需要一些包装器来使用这个库,但我认为你可以通过使用该库实现你想要做的事情。但是,我知道这不是最简单的解决方案。如果有人提出更好、更容易的建议,你可以跳过这个库。

编辑:这看起来非常不完整,但由于它是C#代码,可能会有所帮助。http://www.codeproject.com/KB/graphics/SimpleJpeg.aspx


谢谢,我确实错过了。我会尽快检查它! - mgulde
嗯,结果OpenJPEG基本上只用于JPEG到JPEG2K的转换和反向转换。简单编码器是一个不错的解决方案,尽管看起来非常复杂;) - mgulde
嗯,openjpeg库是否支持增量I/O呢?我稍微看了一下(尽管文档非常简略),所有的图像I/O接口似乎只能在完整的图像上操作...你能指出使用openjpeg库进行增量I/O所需的API调用吗?谢谢! - snogglethorpe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接