這是問題所在。我有一大套512x512像素的JPEG圖塊作爲普通的jpg文件。如何使用Delphi編寫超過物理RAM的巨大JPEG?
我已經寫了一段軟件來完成一堆事情,並且最後需要將所有這些文件拼接成一個巨大的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),所以少量的內存將更加限制軟件!
感謝
編輯:爲了澄清:
我想什麼是找到那些拼接小JPG圖片的方式,寫大一個沒有保持大的圖像在RAM中。顯然,可以直接在磁盤上讀取/寫入位圖流(不確定),但這會導致非常大的文件。所以,如果JPG格式不允許這樣做,任何其他壓縮格式如TIFF或PNG都可以。我也想避免過多的重新壓縮,不要失去(已經壓縮的)最初的JPG質量。
因此,完美的解決方案將是一種直接讀取小文件並以某種方式寫入大文件的方式。瓷磚的尺寸是256x256或512x512,以防止JPEG壓縮材料上的某些對齊情況。
我知道這會出現,但如前所述我不能打開一個更大的圖像的方式,並在Photoshop中工作;) – Alexander 2010-06-27 11:07:54