關於如何獲取給定點的圖像像素顏色,有許多問題/答案。但是,對於大圖像(例如,甚至小至1000 x 1300),所有這些答案都是真的慢(100-500ms)。iOS性能調整:獲取大圖像像素顏色的最快方法
大部分代碼樣本都繪製到圖像上下文中。他們都需要時間,當實際平局發生:
CGContextDrawImage(context, CGRectMake(0.0f, 0.0f, (CGFloat)width, (CGFloat)height), cgImage)
檢查這在儀器顯示,平局是被複制從原始圖像數據完成:
我有甚至嘗試了不同的方法來獲取數據,希望能夠自己獲得字節實際上會證明效率更高。
NSInteger pointX = trunc(point.x);
NSInteger pointY = trunc(point.y);
CGImageRef cgImage = CGImageCreateWithImageInRect(self.CGImage,
CGRectMake(pointX * self.scale,
pointY * self.scale,
1.0f,
1.0f));
CGDataProviderRef provider = CGImageGetDataProvider(cgImage);
CFDataRef data = CGDataProviderCopyData(provider);
CGImageRelease(cgImage);
UInt8* buffer = (UInt8*)CFDataGetBytePtr(data);
CGFloat red = (float)buffer[0]/255.0f;
CGFloat green = (float)buffer[1]/255.0f;
CGFloat blue = (float)buffer[2]/255.0f;
CGFloat alpha = (float)buffer[3]/255.0f;
CFRelease(data);
UIColor *pixelColor = [UIColor colorWithRed:red green:green blue:blue alpha:alpha];
return pixelColor;
這個方法有它的時間上的數據複製:
CFDataRef data = CGDataProviderCopyData(provider);
這樣看來,它也是讀書,而不是CGImage
比如我創建從磁盤上的數據,:
現在,這種方法在一些非正式測試中表現得更好,但它仍然不如我想要的那麼快。 有誰知道獲取底層像素數據的更快方法?
該圖像已被繪製在屏幕上,我想它的像素數據已經在內存中的某處。 –
圖形/ GPU /顯示內存不同於CPU內存。您無法讀取顯示屏的內存。這是不透明的,在應用程序的沙箱外。 – hotpaw2