2009-06-03 506 views
0

我想分配內存 NSImage * originalLocationImage;我想爲700 MB分配內存到800 MB圖像大小

NSURL * fileURL = [NSURL fileURLWithPath:originalLocation]; // originalLocation是我磁盤中的文件路徑

originalLocationImage = [[NSImage alloc] initByReferencingURL:fileURL];

NSBitmapImageRep *sourceRep = [[NSBitmapImageRep alloc]initWithData:[SourceImage TIFFRepresentation]] //this line fails to allocate memory 

,也未能爲大尺寸圖像/

,並引發錯誤

malloc: *** mmap(size=268435456) failed (error code=12) 
*** error: can't allocate region 
*** set a breakpoint in malloc_error_break to debug 

的小圖像能夠正常工作。

任何幫助?

回答

1

我會問你爲什麼要把所有的圖像加載到內存中 - 當然,像瓷磚一樣處理它會是更好的選擇嗎?

您收到此消息是因爲,雖然你可能有這麼多的空閒內存,你沒有自由

+0

之後,我想創建該圖像的預覽,那麼最好的方法是做什麼。我嘗試了很多東西,但現在找不到任何方法。 – ashish 2009-06-03 09:27:34

1

這麼多連續內存如果你想要的是一個預覽,您可以通過在線閱讀行,每隔n行跳過一行,跳過每n個像素。如果需要,您可以通過較小的圖像(較小的圖像)通過更復雜的縮放算法,也可以將其保存爲縮略圖圖像或任何其他圖像。

+0

您提出的解決方案聽起來不錯,但由於格式可能被壓縮,所以他不能二進制跳過輸入 - 他必須解壓縮,然後從解壓縮的輸出中跳過數據。 – diciu 2009-06-03 10:18:36

+0

是的,但你可以解壓縮塊,你不必閱讀整個圖像來做到這一點。 – Blindy 2009-06-03 10:47:51

2

使用libjpeg可能是一個選項,它似乎能夠做一個優化的子縮放到16:http://jpegclub.org/djpeg/

libjpeg是純C語言,所以你可以從Objective-C調用它。

+0

IHAVE問題這行代碼,太多與TIFF圖像 我試圖圖像1 GB大小PSD工作正常 NSBitmapImageRep * sourceRep = [[NSBitmapImageRep的alloc] initWithData:[SourceImage TIFFRepresentation]] //這行無法分配存儲器 有關如何在這種情況下分配內存的任何建議。 – ashish 2009-06-03 10:07:05

0

如果您只想創建圖像的預覽,CGImageSource具有特定的API。他們是第一個,不需要將整個圖像讀入內存。

相關問題