如果不在內存中存儲該圖片並創建第二個緩衝區來存儲修改後的版本,您可以執行的操作並不多。我相信第二個緩衝區可以包含更少的每個顏色位,甚至可以跳過alpha值。如果你使用每種顏色4比特,你可以削減原來的50%,這不包括節省,如果你擺脫了阿爾法。
一組簡單的調用會告訴你在圖片中的信息是什麼,如每個色彩位,是否包括了阿爾法:
CGImageAlphaInfo CGImageGetAlphaInfo (
CGImageRef image
);
返回值 一個CGImageAlphaInfo常量,指定( 1)位圖是否包含阿爾法通道,(2)阿爾法位位於圖像數據中,以及(3)阿爾法值是否是預乘。有關可能的值,請參見「常量」。如果圖像參數引用圖像蒙版,則函數返回kCGImageAlphaNone。
size_t CGImageGetBitsPerComponent (
CGImageRef image
);
返回值 在存儲器用於指定的位圖圖像(或圖像掩模)的每個顏色分量的比特數。可能的值是1,2,4或8.例如,對於16位RGB(A)色彩空間,該函數將返回每個顏色分量4位的值。
size_t CGImageGetBitsPerPixel (
CGImageRef image
);
返回值 在存儲器用於指定的位圖圖像(或圖像掩模)的每個像素的比特數。
這應該讓你開始看看圖像是由什麼組成的。要以更少的位重新創建它,需要更多的工作,並暫時需要更多的內存,直到可以丟棄原始圖像爲止。
感謝您的回答!還有一個問題。我正在檢查來自相機的照片。他們沒有阿爾法,但爲什麼他們是32 ppp?我如何將它們轉換爲24 bpp? – SpaceDog 2009-10-02 19:45:33
我認爲他們在32 bpp中,因爲讀取字邊界數據更快?那麼問題是,處理24bpp圖片的速度是否值得節省25%的空間。 – mahboudz 2009-10-05 19:33:58