这是问题所在。我有一大组 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 内存),因此更少量的内存对软件的限制更大!
谢谢
编辑:澄清:
我想要的是找到一种拼接那些小的JPG图像并写入大的而不将大图像保存在RAM中的方法。显然,可以直接在磁盘上读取/写入位图流(不确定),但这会导致文件非常大。因此,如果 JPG 格式不允许这样做,任何其他压缩格式(如 TIFF 或 PNG)都可以。我还想避免过多的重新压缩,以免失去(已经压缩的)初始 JPG 质量。
因此,完美的解决方案是一种直接读取小文件并以某种方式写入大文件的方法。瓷砖的尺寸为 256x256 或 512x512,以防它有助于在 JPEG 压缩内容上进行一些对齐。