0

これを使って開発された線をユーザーが描くことができるという見方があります。

これで、コードを使用してポイント間に線が引かれます。

- (void) renderLineFromPoint:(CGPoint)start toPoint:(CGPoint)end
{
    static GLfloat*     vertexBuffer = NULL;
    static NSUInteger   vertexMax = 64;
    NSUInteger          vertexCount = 0,
                        count,
                        i;

    //Allocate vertex array buffer
    if(vertexBuffer == NULL)
        vertexBuffer = malloc(vertexMax * 2 * sizeof(GLfloat));

    // Add points to the buffer so there are drawing points every X pixels
    count = MAX(ceilf(sqrtf((end.x - start.x) * (end.x - start.x) + (end.y - start.y) * (end.y - start.y)) / kBrushPixelStep), 1);
    for(i = 0; i < count; ++i) {
        if(vertexCount == vertexMax) {
            vertexMax = 2 * vertexMax;
            vertexBuffer = realloc(vertexBuffer, vertexMax * 2 * sizeof(GLfloat));
        }

        vertexBuffer[2 * vertexCount + 0] = start.x + (end.x - start.x) * ((GLfloat)i / (GLfloat)count);
        vertexBuffer[2 * vertexCount + 1] = start.y + (end.y - start.y) * ((GLfloat)i / (GLfloat)count);
        vertexCount += 1;
    }

    //Render the vertex array
    glVertexPointer(2, GL_FLOAT, 0, vertexBuffer);
    glDrawArrays(GL_POINTS, 0, vertexCount);

    // Display the buffer
    [self swapBuffers];
}

目的は、次のコードによって開始される画面の描画領域を読み取ることです。

PictureView * scratchPaperView = [[RecordedPaintingView alloc] initWithFrame:CGRectMake(0, 45, 320, 415)];
    [self.view addSubview:scratchPaperView];

線のピクセル、つまり描画領域で白いすべてのピクセルを調べたいです。ここからの進め方を教えてください。

4

1 に答える 1

1

PictureViewからUIImage.CGImageまたはCGImageRefを取得できると仮定して、この画像をCGBitMapContextにレンダリングします。この画像は、コンポーネントの数と、アルファがあるかどうか、およびアルパがどこにあるかを示しています。ほとんどの場合、4バイトピクセル(32ビット/ピクセル)を取得します。次に、各ピクセルを見て各行を歩きます。背景が黒(255,0,0,0または0,0,0,255)であるとすると、線に近づいたり、線に当たったりすると、黒以外のピクセルが表示されます。純粋なピクセルは255,255,255,255になります。

画像をコンテキストにレンダリングする方法や、グーグルでピクセルを調べる方法の例を見つけることができると確信しています。率直に言って、いつも私を惹きつけているのは、紛らわしいピクセルレイアウト属性です。私は通常、正しく設定されていることを確認するために、いくつかのテストケースを印刷することになります。

于 2012-08-01T11:38:18.140 に答える