快速有效地获取屏幕(查看)黑色像素

时间:2015-05-14 15:08:49

标签: ios objective-c uiview

我正在搜索已经提出的问题,但所有这些都只是描述了如何获得UIImage的像素颜色(我已经做了但在我的情况下不是最好的解决方案)。

我想检查屏幕上的所有像素并获得黑色像素数或几乎黑色(非常暗)像素。我知道如何检查单个像素的暗度 - 检查所选像素的RGB(255)值是否小于10或其他。但我不知道如何快速有效地检查UIImage的全部像素数。

所以我想查看屏幕上的所有像素并获取它们的数量。稍后在我的应用程序中,我再次执行此操作,然后比较某些事件之前和之后的黑色像素数量。

有没有快速解决方案来获取它们?

1 个答案:

答案 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
        }
    }
}