2011-11-25 105 views
6

我目前正在开发一个c#开源照片拼接软件(Sourceforge Link)。该软件将大量小照片(拼贴)拼接成一个大图像。c#:保存JPG的部分

由于最终图像的大小通常是20k像素乘以15k像素的数量级,所以我只保存了如何在内存中排列图块的贴图。为了构建最终的图像,我正在构建它的部分,即8行的带(也可以由任何其他数字)。

在bmps的情况下,这个数据可以很容易地通过块来保存块,首先写一个bmp头,然后将ARGB数据附加到这个文件。

但是由此产生的bmps太大而无法进一步处理(例如将它们交给一些海报印刷公司)。因此,我想将这些大图像保存为我的硬盘上的jpgs。

现在的问题是,由于jpgs被压缩,以块形式写入数据似乎非常棘手(正常的Bitmap.Save()函数会首先将完整的图像加载到内存中,因此不适用),因为写入纯,未压缩的RGB数据不会这样做。

在派对上写jpgs的基本功能应该存在,因为据我所知,jpg的压缩算法可以处理大块或8x8像素。

我查看了几个图像库(FreeImage,GraphicsMagick,LibTiff.NET)以找到解决方案,但找不到任何解决方案。 LibTiff基本上具有所需的功能,但仅限于tiff图像格式。

非常感谢您的帮助! Max

回答

1

既然你没有提到OpenJPEG library,我以为你可能已经错过了。

http://www.openjpeg.org/

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

编辑:这看起来很不完整,但可能有帮助,因为它是C#代码。 http://www.codeproject.com/KB/graphics/SimpleJpeg.aspx

+0

谢谢,我的确错过了。将尽快检查出来! – mgulde

+0

嗯,转出OpenJPEG基本上只能用于JPEG到JPEG2K的转换和返回。简单的编码器是一个很好的解决方案,尽管它看起来很复杂;) – mgulde

+0

嗯,_does_ openjpeg库支持增量I/O?我看了一下(尽管文档非常小),并且所有的图像I/O接口似乎只能在完整的图像上运行......您能否指出用于执行增量I/O的API调用openjpeg库...?谢谢! – snogglethorpe