2011-11-25 75 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