检测UIView区域的颜色

时间:2012-07-14 11:02:49

标签: ios colors area

我正在开发一个用户可以在屏幕上绘图的应用程序。我是从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);
}

1 个答案:

答案 0 :(得分:1)

要每1/15秒调用一次方法,您可以使用CADisplayLink frameInterval为4(60 FPS / 4 =每秒15次)。如果您使用的是GLPaint,则意味着您正在使用OpenGL。您可以使用函数glReadPixels()来获取特定区域的像素数据。但是,您需要确保可以访问由CADisplayLink调用的函数中的底层缓冲区。我对OpenGL不太满意如何确保这一点。