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