用于PNG的UIImageWriteToSavedPhotosAlbum在缩略图的透明部分创建随机图像(仅限)

时间:2012-10-02 21:03:32

标签: objective-c ios opengl-es uiimage png

我有一些很好的代码用于阅读屏幕或屏幕外缓冲区,并将结果保存为iPad相册,作为具有透明度的PNG。在ipad照片查看器或任何其他图像查看器中查看时,图像看起来很完美。但是,在ipad的原生照片查看应用程序中,缩略图会在缩略图的透明部分显示相册中其他图像的部分内容。

有没有其他人遇到过这个问题,如果是这样的话就找到了解决方法?这是我生成图像的屏幕外(部分)代码:

EAGLContext *myContext = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
[EAGLContext setCurrentContext:myContext];

[... set up render buffer code removed for display ...]

[EAGLContext setCurrentContext:myContext];

ImageTextureManager *imageManager = [[ImageTextureManager alloc] init];
[imageManager loadImageTexture:gAppModel.currentImageRef];
[imageManager release];

glBindRenderbufferOES(GL_RENDERBUFFER_OES, offscreenColorRenderbuffer);

[self renderTransformedImage]; // render the image to the buffer

[myContext presentRenderbuffer:GL_RENDERBUFFER_OES];

// grab image from frameBuffer and return it as UIImage
NSInteger x = 0, y = 0;
NSInteger dataLength = width * height * 4;
GLubyte *data = (GLubyte*)malloc(dataLength * sizeof(GLubyte));

glPixelStorei(GL_PACK_ALIGNMENT, 4);
glReadPixels(x, y, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data);

CGDataProviderRef ref = CGDataProviderCreateWithData(NULL, data, dataLength, NULL);
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();
CGImageRef iref = CGImageCreate(width, height, 8, 32, width * 4, colorspace,
                                kCGBitmapByteOrder32Big | kCGImageAlphaPremultipliedLast,
                                ref, NULL, true, kCGRenderingIntentDefault);


UIGraphicsBeginImageContext(CGSizeMake(width, height));
CGContextRef cgcontext = UIGraphicsGetCurrentContext();
CGContextSetBlendMode(cgcontext, kCGBlendModeCopy);
CGContextDrawImage(cgcontext, CGRectMake(0.0, 0.0, width, height), iref);
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();  // this call creates an AutoRelease UIImage
NSData* imdata = UIImagePNGRepresentation(image); // get PNG representation
UIImage* myImagePNG = [UIImage imageWithData:imdata]; // wrap UIImage around PNG representation
UIImageWriteToSavedPhotosAlbum(myImagePNG, nil, nil, nil);
UIGraphicsEndImageContext();

感谢medvedNick提供的屏幕外渲染代码:Drawing into OpenGL ES framebuffer and getting UIImage from it on iPhone

0 个答案:

没有答案