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
}
沙尼
嗨大卫 我想你segusted什么和粘贴代码在保存动作开始时,它仍然保存着黑色的图像。 没有办法迭代绘图的像素并将所有黑色像素更改为白色? 非常感谢您的帮助 Shani – shannoga 2010-09-04 07:03:42
您是仅在该代码中粘贴的,还是进行了其他必要的更改? – 2010-09-07 15:55:27