我使用加載this (very small) image:如何判斷和解釋CGImage的像素格式
UIImage* image = [UIImage named:@"someFile.png"];
的圖像是4X1,它包含一個紅色,綠色,藍色和白色像素從左至右,在該訂單。
接下來,我得到的像素數據進行底層CGImage的:現在
NSData* data = (NSData*)CGDataProviderCopyData(CGImageGetDataProvider(image.CGImage));
,出於某種原因,像素數據異地佈置取決於iOS設備上。
當我在模擬器或在我的iPhone 4運行應用程序,像素數據是這樣的:
(255,0,0),(0,255,0),(0,0,255),( 255,255,255)
所以,像素是每個像素3個字節,藍色是最重要的字節,紅色是最不重要的。所以我想你可以稱之爲BGR?
當我檢查CGBitmapInfo時,可以看到kCGBitmapByteOrderMask是kCGBitmapByteOrderDefault。我找不到解釋「默認」的地方。
在另一方面,當我在我的第一代iPhone上運行它,像素數據是這樣的:
(0,0,255,255),(0,255,0,255),(255,0,0,255) (255,255,255,255)
所以每個通道4個字節,alpha作爲最高有效字節,藍色作爲最低有效字節。所以......這就是所謂的ARGB?
我一直在尋找CGBitmapInfo的線索如何檢測佈局。在第一代iPhone上,kCGBitmapAlphaInfoMask是kCGImageAlphaNoneSkipFirst。這意味着最重要的位被忽略。所以這是有道理的。在第一代iPhone上,kCGBitmapByteOrderMask是kCGBitmapByteOrder32Little。我不知道這意味着什麼,也不知道如何將它與R,G和B組件在內存中的佈局聯繫起來。任何人都可以對此有所瞭解嗎?
謝謝。
這被標記爲接受的答案,但它並沒有真正回答這個問題。這似乎有點像用錘子錘擊釘子。當所有人真正想要做的事情是爲了整理現有數據的字節順序時,爲什麼使用所有代碼重繪整個圖像? –
維克多,你有沒有想過這一點,即如何處理kCGBitmapByteOrderDefault? –