我正在开发一个用户可以在屏幕上绘图的应用程序。我是从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);
}
答案 0 :(得分:1)
要每1/15秒调用一次方法,您可以使用CADisplayLink frameInterval
为4(60 FPS / 4 =每秒15次)。如果您使用的是GLPaint,则意味着您正在使用OpenGL。您可以使用函数glReadPixels()来获取特定区域的像素数据。但是,您需要确保可以访问由CADisplayLink调用的函数中的底层缓冲区。我对OpenGL不太满意如何确保这一点。