作爲this question的特例:從不支持的格式的UIImage獲取像素數據?
如果UIImage的格式不受支持,你會怎麼做?在我的情況下,我有一個單色的UIImage對象,我從文件中讀入。每個像素都有8位彩色(白色)數據,接着是8位alpha數據。該格式不受支持,但圖像在iPhone屏幕上顯示得很好。
但是,如引用問題中所述獲取像素數據將不起作用,因爲格式不受支持。那麼我能做什麼?
作爲this question的特例:從不支持的格式的UIImage獲取像素數據?
如果UIImage的格式不受支持,你會怎麼做?在我的情況下,我有一個單色的UIImage對象,我從文件中讀入。每個像素都有8位彩色(白色)數據,接着是8位alpha數據。該格式不受支持,但圖像在iPhone屏幕上顯示得很好。
但是,如引用問題中所述獲取像素數據將不起作用,因爲格式不受支持。那麼我能做什麼?
會像這樣的工作,從本質上將圖像轉換爲單色位圖來操縱像素數據。
CGImageRef cgImage = [image CGImage];
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
CGContextRef bitmapContext = CGBitmapContextCreate(NULL, CGImageGetWidth(cgImage), CGImageGetHeight(cgImage), 8, CGImageGetWidth(cgImage)*2, colorSpace, kCGImageAlphaLast);
CGColorSpaceRelease(colorSpace);
CGContextDrawImage(bitmapContext, CGRectMake(0, 0, CGBitmapContextGetWidth(bitmapContext), CGBitmapContextGetHeight(bitmapContext)), cgImage);
UInt8 *data = CGBitmapContextGetData(bitmapContext);
int numComponents = 2;
int bytesInContext = CGBitmapContextGetHeight(bitmapContext) * CGBitmapContextGetBytesPerRow(bitmapContext);
int white;
int alpha;
for (int i=0; i < bytesInContext; i+= numComponents) {
white = data[i];
alpha = data[i+1];
}
您必須呈現爲已知/支持的像素格式。只需設置灰度或24BPP的位圖渲染目標,然後以1:1的縱橫比將圖像繪製到像素緩衝區中,因此不會調整大小。然後檢查已知的格式結果爲字節或字大小的像素。您只需要擔心iOS上的sRGB顏色空間,這樣可以使事情變得簡單,並且您可以直接從像素緩衝區中直接讀取像素值。
bitmapContext返回爲零,因爲它不受支持。我想我可以試着對它說謊,並聲稱我有RGB每像素16位,每個組件5位,並且沒有支持的alpha,並從那裏抓取數據。可能工作;肯定不會讓人滿意。 – 2011-05-08 19:55:21