检测UIView区域的颜色

3
我正在开发一个应用程序,用户可以在屏幕上绘图。我从Apple提供的GLPaint开始。
我想检测用户是否涂色了屏幕上的特定区域,并且我想每1/15秒检测一次(或类似的速度,非常快)。
我想创建一个位图图形上下文并将其传递给CGBitmapContextCreate,然后将我的视图绘制到该上下文中并循环遍历所有像素。
我正在寻找更高效的方法... 有什么帮助吗?
更新:
我尝试使用glReadPixels(),但它非常慢...也许我错过了什么...
我试图读取一个100x100的区域,但这种方法需要大约1秒钟才能完成。
这是我的代码。
- (void)isGameFinished
{
    float x = 0;
    float y = 0;
    float w = 100;
    float h = 100;
    GLubyte* pixelColors = malloc(w * h * sizeof(GLubyte) * 3);
    glReadPixels(x,y, w, h, GL_RGB, GL_UNSIGNED_BYTE, &pixelColors[0]);
    
    for(int i=0;i<w*h;i+=3)
    {
        ccColor3B color=ccc3(pixelColors[i],pixelColors[i+1],pixelColors[i+2]);
        NSLog(@"index: %d  r:%c g:%c b:%c",i,color.r,color.g,color.b);
    }
    
    free(pixelColors);
}

如果你正在使用NSLog,那么它肯定会很慢,因为NSLog本身就很慢。 - borrrden
1个回答

1

如果要每1/15秒调用一次方法,可以使用CADisplayLink,并将frameInterval设置为4(60 FPS / 4 = 每秒15次)。如果您正在使用GLPaint,则表示您正在使用OpenGL。您可以使用函数glReadPixels()获取特定区域的像素数据。但是,在由CADisplayLink调用的函数中,您需要确保可以访问底层缓冲区。我对OpenGL的了解不够深入,无法确定如何确保这一点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接