在xcode中替换openGl绘图中的特定颜色?

Posted

技术标签:

【中文标题】在xcode中替换openGl绘图中的特定颜色?【英文标题】:replace specific color in openGl drawing in xcode? 【发布时间】:2010-09-01 14:09:41 【问题描述】:

我正在构建一个使用 openGl 的绘图应用程序。我是 openGL 的新手,但设法构建了基本应用程序。

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

我有一个视图,其中包含用户用来绘制的图像,因此它必须是可见的,但不受绘图画布的影响。

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

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

问题-

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

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

有人可以指导我吗?

坦克 沙尼


嗨,大卫,感谢您的回复。第一次我真的按原样使用它。我红了一点,并添加了其余的代码(我希望如此)这次背景变成了白色,但绘制的线条消失了。我尝试检查每个点的缓冲区颜色,并在每次为 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);

【讨论】:

嗨,大卫,我尝试了你在保存操作开始时所设置并粘贴的代码,但它仍然以黑色保存图像。没有办法迭代绘图的像素并将所有黑色像素更改为白色吗?感谢您的帮助 Shani 您是只粘贴了该代码,还是还进行了其他隐含的必要更改?

以上是关于在xcode中替换openGl绘图中的特定颜色?的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL ES 2.0 (iOS) 中的 2D 绘图

无法在 Visual Studio 2012 中的 opengl 中绘图

Opengl1.1绘图之GL_COLOR_LOGIC_OP

Opengl1.1绘图之GL_COLOR_LOGIC_OP

Python:如果超出特定范围,是不是可以更改绘图中的线条颜色?

用另一种颜色替换图像中的特定颜色