问题在于,我有一组大型的512x512像素的JPEG瓷砖作为常规jpg文件。
我编写了一段软件来执行许多操作,并需要在最后将所有文件拼接成一个巨大的JPEG。
首先,我不希望使用ImageMagick来执行此操作,而是要在我的软件内部执行!
在Delphi中,无法将JPG文件复制到另一个JPG画布上,因此必须首先创建TBitmap,然后将图块复制到TBitmap画布上,然后将TBitmap转换为jpeg图片并保存到文件中。
当生成的文件尺寸太大(例如20,000 x 20,000像素)时,问题就出现了。当我调用TBitmap.SetSize时,自然会出现错误(内存不足或类似的错误)。
我在同一台机器上使用Photoshop进行了一些测试,并能够创建一个复杂的(非空白)30,000 x 30,000文件并将其保存为JPEG。
所以问题是,我该如何执行相同的操作?找到一种方式将所有JPEGS拼接起来,直接将结果写入磁盘或使用其他技巧?...
即使20k x 20k像素似乎已经足够大,但此值仅适用于我的机器(4 GB RAM),因此更少的RAM将进一步限制软件!
谢谢
编辑:为了澄清:
我希望找到一种方法来拼接这些小的JPG图像,并在不将大图像保留在RAM中的情况下编写大图像。显然,在磁盘上可以直接进行位图流读/写(不确定),但这将导致一个非常大的文件。因此,如果JPG格式不允许执行此操作,则任何其他压缩格式,如TIFF或PNG,都可以。我也想避免过多的重新压缩,以不失去(已经压缩的)初始JPG质量。
因此,完美的解决方案是找到一种方法,直接读取小文件并以某种方式写入大文件。如果需要JPEG压缩方面的对齐,图块的尺寸为256x256或512x512。