我正在构建一个使用openGl的绘图应用程序。我是openGL的新手,但设法建立了基本的应用程序。
我现在正在研究用户将图纸保存到相机胶卷的能力。
我有一个视图,其中包含用户用于绘制的图像,因此它必须是可见的,但不会受到绘图画布的影响。
bove它我有一个用于绘图的视图。因为我之前所说的我已经将背景设置为黑色透明 -
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
}
Shani
答案 0 :(得分:1)
在保存期间更改绘图代码的行为:
if(willSave)
glClearColor(1,1,1,1);
else
glClearColor(0,0,0,0);