我正在搜索已经提出的问题,但所有这些都只是描述了如何获得UIImage的像素颜色(我已经做了但在我的情况下不是最好的解决方案)。
我想检查屏幕上的所有像素并获得黑色像素数或几乎黑色(非常暗)像素。我知道如何检查单个像素的暗度 - 检查所选像素的RGB(255)值是否小于10或其他。但我不知道如何快速有效地检查UIImage的全部像素数。
所以我想查看屏幕上的所有像素并获取它们的数量。稍后在我的应用程序中,我再次执行此操作,然后比较某些事件之前和之后的黑色像素数量。
有没有快速解决方案来获取它们?
答案 0 :(得分:0)
如果其他人有类似的情况,我正在寻找“快照”。 我拍了一张快照:
UIGraphicsBeginImageContext(self.view.bounds.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *original = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
然后搜索其中的黑色像素:
width = (int)original.size.width;
height = (int)original.size.height;
CFDataRef imageData = CGDataProviderCopyData(CGImageGetDataProvider(original.CGImage));
const UInt8 *pixels = CFDataGetBytePtr(imageData);
UInt8 blackThreshold = 5; // or some value close to 0 - dark pixels
int bytesPerPixel = 4;
for(int x = 0; x < width; x++) {
for(int y = 0; y < height; y++) {
int pixelStartIndex = (x + (y * width)) * bytesPerPixel;
UInt8 redValue= pixels[pixelStartIndex];
UInt8 greenValue = pixels[pixelStartIndex + 1];
UInt8 blueValue = pixels[pixelStartIndex + 2];
if(redValue < blackThreshold && blueValue < blackThreshold && greenValue < blackThreshold) {
/// count black pixels ore something else you want to do
}
}
}