2010-09-01 60 views
2

我构建了一个使用openGl的绘图应用程序。我是新来的OpenGL,但设法建立基本的应用程序。在xcode中替换openGl绘图中的特定颜色?

我现在正在研究用户将图纸保存到相机胶卷的功能。

我有一个视图保存用户用来绘制的图像,所以它必须可见但不受绘制画布的影响。

a bove it我有一个视图,我用于绘图。因为我之前说过我已将背景设置为黑色透明 -

glClearColor(0.0f,0.0f,0.0f,0.0f);

问题 -

一切都很好,直到我保存图像。显然背景颜色是透明的黑色,所以图像有黑色的背景,而我需要它是白色的。

我教会在保存之前将画布中的所有黑色更改为白色。

有人可以指导我吗?

坦克 SHANI


嗨大卫感谢回答。我第一次真正使用它。我再红一点,并添加了其他代码(我希望如此),这次背景变成了白色,但画出的线条消失了。我试图检查每个点的缓冲区颜色,并在每次为0时将其替换为255.这很好,背景变成白色,线条保留,但它们的颜色以我无法理解的方式改变。如果你能帮助我,我将不胜感激。

这是我的代码中节省写道

-(void)saveCurrentScreenToPhotoAlbum { 
    int width = 768; 
    int height = 1024; 


    //glClearColor(1.0f, 1.0f, 1.0f, 1.0f); 
    //glClear(GL_COLOR_BUFFER_BIT); 


    NSInteger myDataLength = width * height * 4; 
    GLubyte *buffer = (GLubyte *) malloc(myDataLength); 
    GLubyte *buffer2 = (GLubyte *) malloc(myDataLength); 
    glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, buffer); 

    NSLog(@"%d", buffer[0]); 
    for(int y = 0; y <height; y++) { 
     for(int x = 0; x <width * 4; x++) { 

      if (buffer[y * 4 * width + x]==0) { 
       buffer[y * 4 * width + x] = 250; 
       //buffer[y * 4 * width + x+1] = 250; 
       NSLog(@" = %i",y * 4 * width + x); 

      } 

       buffer2[(height - 1 - y) * width * 4 + x] = buffer[y * 4 * width + x]; 



      // printf("%d %d %d\n",buffer[(height - 1 - y) * width * 4 + x],buffer[1],buffer[2]); 
     } 
    } 
    free(buffer); // YOU CAN FREE THIS NOW 

    CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer2, myDataLength, releaseData); 
    int bitsPerComponent = 8; 
    int bitsPerPixel = 32; 
    int bytesPerRow = 4 * width; 
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); 
    CGBitmapInfo bitmapInfo = kCGBitmapByteOrderDefault; 
    CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; 
    CGImageRef imageRef = CGImageCreate(width, height, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent); 

    CGColorSpaceRelease(colorSpaceRef); // YOU CAN RELEASE THIS NOW 
    CGDataProviderRelease(provider);  // YOU CAN RELEASE THIS NOW 

    UIImage *image = [[UIImage alloc] initWithCGImage:imageRef]; // change this to manual alloc/init instead of autorelease 
    CGImageRelease(imageRef); // YOU CAN RELEASE THIS NOW 


    UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), nil); // add callback for finish saving 

} 

沙尼

回答

1

更改绘图代码的行为:

if(willSave) 
    glClearColor(1,1,1,1); 
else 
    glClearColor(0,0,0,0); 
+0

嗨大卫 我想你segusted什么和粘贴代码在保存动作开始时,它仍然保存着黑色的图像。 没有办法迭代绘图的像素并将所有黑色像素更改为白色? 非常感谢您的帮助 Shani – shannoga 2010-09-04 07:03:42

+0

您是仅在该代码中粘贴的,还是进行了其他必要的更改? – 2010-09-07 15:55:27