2012-03-11 10 views
5

現在、私はGLpaintに基づく描画アプリケーションを使って作業しています。現在の画面を保存することは、私にとって忙しい痛みになります。私はViewControllerを持って、ビューコントローラの上に私はUIIMageViewとUIView(PaintingView)をロードしました。今、私はUIImageViewの上に描いているようです。GLPaint保存機能(現在の画面を背景画像で保存)

私はこの質問GLPaint save imageで私の現在の図面を取得することができました。 私は私の現在の図面をキャプチャしようとすると、私は黒い画面と私の図面を取得します。私が望むのは、背景イメージ(UIImageView)を使った私の描画です。 UIImageViewでUIViewをオーバーレイする必要がありますか?

答えて

2

UIKit(UIImageView)ではなく、OpenGLを使用して画像を読み込む必要があります。そうしないと、OpenGLViewを個々のイメージとして取得するだけでなく、UIKitビューを別のイメージとして取得することができます。

これを行うには、GLpaintサンプルで提供されているPaintingViewクラスのテクスチャでイメージをレンダリングし、描画ビューにクワッドを描画してイメージをロードする必要があります。

0

私は、OpenGLの私のイメージをつかむために、このコードを使用します。

-(BOOL)iPhoneRetina{ 
    return ([[UIScreen mainScreen] respondsToSelector:@selector(displayLinkWithTarget:selector:)] && ([UIScreen mainScreen].scale == 2.0))?YES:NO; 
} 

void releasePixels(void *info, const void *data, size_t size) { 
    free((void*)data); 
} 

-(UIImage *) glToUIImage{ 

    int imageWidth, imageHeight; 

    int scale = [self iPhoneRetina]?2:1; 

    imageWidth = self.frame.size.width*scale; 
    imageHeight = self.frame.size.height*scale; 

    NSInteger myDataLength = imageWidth * imageHeight * 4; 

    // allocate array and read pixels into it. 
    GLubyte *buffer = (GLubyte *) malloc(myDataLength); 
    glReadPixels(0, 0, imageWidth, imageHeight, GL_RGBA, GL_UNSIGNED_BYTE, buffer); 

    // make data provider with data. 
    CGDataProviderRef provider = CGDataProviderCreateWithData(NULL, buffer, myDataLength, releasePixels); 

    // prep the ingredients 
    int bitsPerComponent = 8; 
    int bitsPerPixel = 32; 
    int bytesPerRow = 4 * imageWidth; 
    CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB(); 
    CGBitmapInfo bitmapInfo = kCGImageAlphaPremultipliedLast; 
    CGColorRenderingIntent renderingIntent = kCGRenderingIntentDefault; 

    // make the cgimage 

    CGImageRef imageRef = CGImageCreate(imageWidth, imageHeight, bitsPerComponent, bitsPerPixel, bytesPerRow, colorSpaceRef, bitmapInfo, provider, NULL, NO, renderingIntent); 

    UIImage *myImage = [UIImage imageWithCGImage:imageRef scale:scale orientation:UIImageOrientationDownMirrored]; //Render image flipped, since OpenGL's data is mirrored 

    CGImageRelease(imageRef); 
    CGColorSpaceRelease(colorSpaceRef); 

    CGDataProviderRelease(provider); 

    return myImage; 
} 

と背景画像とそれをマージするには、この1:

-(UIImage*)mergeImage:(UIImage*)image1 withImage:(UIImage*)image2{ 

    CGSize size = image1.size; 

    UIGraphicsBeginImageContextWithOptions(size, NO, 0); 

    [image1 drawAtPoint:CGPointMake(0.0f, 0.0f)]; 
    [image2 drawAtPoint:CGPointMake(0.0f, 0.0f)]; 

    UIImage *result = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    return result; 
} 

このような何か:

finalImage = [self mergeImage:BackgroundImage withImage [self glToUIImage]];