【问题标题】:Detect color of UIView Area检测 UIView 区域的颜色
【发布时间】:2012-07-14 01:20:50
【问题描述】:

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

标签: ios colors area


【解决方案1】:

对于每 1/15 秒调用一次方法,您可以使用 CADisplayLink 和 4 的 frameInterval(60 FPS / 4 = 每秒 15 次)。如果您使用的是 GLPaint,则意味着您使用的是 OpenGL。可以使用函数glReadPixels()获取某个区域的像素数据。但是,您需要确保您可以访问 CADisplayLink 调用的函数中的底层缓冲区。我在 OpenGL 方面还不够好,无法说明如何确保这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    • 2013-04-04
    • 2021-04-19
    • 2013-09-09
    • 2013-09-22
    • 2011-10-29
    相关资源
    最近更新 更多