2012-08-01 54 views
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]; 

我想找出线条的像素,即绘图区域中所有白色的像素。请告诉我如何从这里开始?

+0

你可以尝试读取图像中的每个像素,看看它的白色或其他颜色,并在此基础上,你可以区分你的线是白色的屏幕 – Fyre 2012-08-01 08:37:06

回答

1

假设你可以得到一个UIImage.CGImage或CGImageRef出PictureView的,那么你就使这个形象成CGBitMapContext。图像会告诉你组件的数量,以及它是否具有alpha和alpa。很可能你会得到4个字节的像素(32位/像素)。然后,您逐行看每个像素。假设黑色背景(可能是255,0,0,0或0,0,0,255),当您靠近或碰到一条线时,您会看到非黑色像素。一个纯粹的像素将是255,255,255,255。

我敢肯定,你可以找到如何呈现的图像为背景,以及如何通过谷歌搜索检查周围像素的例子。坦率地说,总是让我感到困惑的像素布局属性 - 我通常最终会打印一些测试用例,以确保我的判断正确。

+0

谢谢,以及我不得不转换为图像使用glReadPixels然后将它们转换为图像并稍后处理它们,但一旦图像在那里,我就设法处理它以达到我想要的效果。 – SpeedBirdNine 2012-08-02 04:51:58