快速高效地获取屏幕(视图)黑色像素
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
【讨论】:
以上是关于快速高效地获取屏幕(视图)黑色像素的主要内容,如果未能解决你的问题,请参考以下文章