快速高效地获取屏幕(视图)黑色像素

Posted

技术标签:

【中文标题】快速高效地获取屏幕(视图)黑色像素【英文标题】:Get screen (View) black pixels fast and efficiently 【发布时间】:2015-05-14 15:08:49 【问题描述】:

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

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

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

有没有什么快速的办法可以得到它们?

【问题讨论】:

稍微提高了可读性,试图把真正的问题解释清楚一点。 你可以对屏幕进行“快照”,现在问题和获取图像的像素一样。 @matt 我想通了!无论如何,谢谢..这正是我正在寻找的。​​span> 【参考方案1】:

这是我正在寻找的“快照”,如果其他人会遇到类似的情况。 我拍了一张快照:

 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
        
    

【讨论】:

以上是关于快速高效地获取屏幕(视图)黑色像素的主要内容,如果未能解决你的问题,请参考以下文章

计算黑色像素比

获取 cv::Mat 的黑色像素列表

OpenCV - remap() - 获取黑色像素

XLPagerTabStrip 黑色空间

如何找到黑色像素位置

在关闭视图 iAds 在 ios 5 ipad 中变为黑色。(深黑色)