2017-04-25 78 views
1

我使用PNGJ庫來保存大型PNG文件(40000 x 3000)。現在我需要將圖像向右旋轉90度,而不將整個圖像保存在內存中。 PNGJ庫僅限於逐行寫入圖像,所以我無法旋轉每一行並逐列寫入imagem列。旋轉圖像而不將整個圖像保存在內存中

有沒有辦法做到這一點?

回答

3

PNGJ庫受限於線寫圖像線

其實,這是PNG格式的路線導向。如果不讀取所有「前一個」像素,則無法讀取PNG圖像的單個像素。所以,我猜你不走運。

如果你不能在內存中存儲完整的圖像,我認爲你可以做的最好的方法是通過K水平條紋加載和寫入它。您可以通過讀取完整圖像來填充第一個條紋(您只存儲每行的第一個像素,對應於旋轉圖像的第一個水平條紋的像素,丟棄其餘的圖像),寫入並重新讀取文件填充並寫入第二個條紋等。 這涉及到K原始文件的讀數(當然,您應該使條紋儘可能厚,以便使存儲容許量更小)。我希望你明白這個主意。

你可以用PNGJ做到這一點。

+0

你知道一個更好的方式來做不同的格式嗎? – dinhokz

+1

好吧,使用非壓縮格式(比如BMP),你可以隨機讀取像素(RandomAccessFile)。不過,我懷疑這會比上面提出的更好。 – leonbloy