0

我有一个视图,用户可以在该视图上绘制一些线,这些线是使用this开发的。

现在使用代码在点之间绘制线条:

- (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 中。该图像将告诉您组件的数量以及它是否具有 alpha 以及 alpa 在哪里。很可能您将获得 4 字节像素(32 位/像素)。然后,您遍历每一行,查看每个像素。假设背景为黑色(即 255,0,0,0 或 0,0,0,255),当您靠近或击中一条线时,您将看到非黑色像素。纯像素将是 255,255,255,255。

我很确定您可以找到如何将图像渲染到上下文中的示例,以及如何通过谷歌搜索来检查像素。坦率地说,总是让我感到困惑的是令人困惑的像素布局属性——我通常最终会打印一些测试用例以确保我做对了。

于 2012-08-01T11:38:18.140 回答