objective-c - 获取屏幕上某种颜色所占据的区域 - iOS
<p><p>我正在尝试做一些类似于 <a href="https://stackoverflow.com/questions/10675245/ios-calculating-percent-of-a-color-in-an-area" rel="noreferrer noopener nofollow">this question</a> 中所要求的事情。 ,但我不太明白这个问题的答案,我不确定它是否是我需要的。</p>
<p>我需要的很简单,尽管我不太确定它是否容易。我想计算屏幕上某种颜色的像素数。我知道我们看到的每个“像素”实际上都是不同颜色的像素组合,例如绿色。所以我需要的是 <em>actual</em> 颜色 - 用户看到的颜色。 </p>
<p>例如,如果我创建了一个 UIView,将背景颜色设置为 <code></code>,并将其尺寸设置为屏幕面积的一半(我们可以假设状态栏为为简单起见而隐藏并且我们使用的是 iPhone),我希望这种“魔术方法”返回 240 * 160 或 38,400- 屏幕面积的一半。</p>
<p>我不希望有人写出这个“神奇的方法”,但我想知道</p>
<p>a) 如果可能的话</p>
<p>b) 如果是这样,如果它几乎是实时完成的</p>
<p>c) 如果还是这样,从哪里开始。我听说可以用 OpenGL 完成,但我没有这方面的经验。</p>
<p>感谢 Radif Sharafullin,这是我的解决方案:</p>
<pre><code>int pixelsFromImage(UIImage *inImage) {
CGSize s = inImage.size;
const int width = s.width;
const int height = s.height;
unsigned char* pixelData = malloc(width * height);
int pixels = 0;
CGContextRef context = CGBitmapContextCreate(pixelData,
width,
height,
8,
width,
NULL,
kCGImageAlphaOnly);
CGContextClearRect(context, CGRectMake(0, 0, width, height));
CGContextDrawImage(context, CGRectMake(0, 0, width, height), inImage.CGImage );
CGContextRelease(context);
for(int idx = 0; idx < width * height; ++idx) {
if(pixelData) {
++pixels;
}
}
free(pixelData);
return pixels;
}
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>这是可能的。我做了类似的事情来计算透明像素的百分比,但由于我需要粗略的估计,我不是在看每个像素,而是在每十个像素,<code>step</code> 变量在下面的代码中。</p>
<pre><code>BOOL isImageErased(UIImage *inImage, float step, int forgivenessCount){
CGSize s = inImage.size;
int width = s.width;
int height = s.height;
unsigned char*pixelData = malloc( width * height );
int forgivenessCounter=0;
CGContextRef context = CGBitmapContextCreate ( pixelData,
width,
height,
8,
width,
NULL,
kCGImageAlphaOnly );
CGContextClearRect(context, CGRectMake(0, 0, width, height));
CGContextDrawImage( context, CGRectMake(0, 0, width, height), inImage.CGImage );
CGContextRelease( context );
for (int x=0; x<width; x=x+step) {
for (int y=0; y<height; y=y+step) {
if(pixelData) {
forgivenessCounter++;
if (forgivenessCounter==forgivenessCount) {
free(pixelData);
return FALSE;
}
};
}
}
free( pixelData );
return TRUE;}
</code></pre>
<p>如果您传递经过预处理的灰度图像或修改 API 的 <code>kCGImageAlphaOnly</code> 设置,我相信此代码可以用于您的目的。</p>
<p>希望有帮助</p></p>
<p style="font-size: 20px;">关于objective-c - 获取屏幕上某种颜色所占据的区域 - iOS,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/11636679/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/11636679/
</a>
</p>
页:
[1]