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);
}
4

1 に答える 1

1

1/15 秒ごとにメソッドを呼び出すには、4 のCADisplayLinkを使用できますframeInterval(60 FPS / 4 = 1 秒あたり 15 回)。GLPaint を使用している場合は、OpenGL を使用していることを意味します。関数glReadPixels()を使用して、特定の領域のピクセル データを取得できます。ただし、CADisplayLink によって呼び出される関数内の基になるバッファにアクセスできることを確認する必要があります。私は OpenGL が得意ではないので、それを保証する方法を説明することはできません。

于 2012-07-14T16:07:52.480 に答える