實際上最初的問題是:“kCGBitmapByteOrderDefault 到底是什么?” 因為有時 CGImageGetByteOrderInfo(CGImageRef image) 會回傳 kCGBitmapByteOrderDefault 作為結果。但這只是說明它等于主機/設備的位元組序。
然后問題自動變為:“主機/設備的位元組序是什么?”
蘋果檔案告訴有幾個常量可以是準確的答案:
kCGImageByteOrder16Big
kCGImageByteOrder16Little
kCGImageByteOrder32Big
kCGImageByteOrder32Little
所以,我需要從上面的串列中回傳一些值的解決方案。
uj5u.com熱心網友回復:
你說:
因為有時會
CGImageGetByteOrderInfo(CGImageRef image)回傳kCGBitmapByteOrderDefault結果。但這只是說明它等于主機/設備的位元組序。
這不是機器的位元組序。它是 CoreGraphics 的默認位元組序。請參閱實際上是什么kCGBitmapByteOrderDefault意思?在蘋果論壇上。他們指出,雖然沒有記錄,但kCGBitmapByteOrderDefault似乎采用了大端順序。
可以通過創建一個kCGBitmapByteOrderDefault背景關系來確認這一點,另一個可以使用kCGBitmapByteOrder32Big,并比較它們如何呈現特定顏色。在我的 little-endian 機器上, 的結果kCGBitmapByteOrderDefault與 from 的結果相同kCGBitmapByteOrder32Big,not kCGBitmapByteOrder32Little。這與該論壇討論中的主張一致。
FWIW、PNG 和 JPG 使用“網路位元組順序”(即大端序)。此外,還有一個直觀的吸引力,例如,RGBA 影像的位元組按紅色、綠色、藍色和 alpha 的順序出現,而不是相反。如果 CoreGraphics 想選擇一個不考慮硬體的標準,那么 big-endian 并不是一個不合理的選擇。我只是希望他們記錄下來。
話雖如此,當我需要訪問/操作影像的像素緩沖區時,我總是將影像渲染到具有明確位元組順序的緩沖區,如 Apple 的Technical Q&A QA1509中所述。不過,就個人而言,我讓 CoreGraphics 為我管理資料提供者,而不是由那個舊的技術問答檔案手動malloc/建議。free請參閱QA1509 代碼的這種排列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/476140.html
