2012-03-11 3 views
5

वर्तमान में मैं ग्लैपेंट के आधार पर एक ड्राइंग एप्लिकेशन के साथ काम कर रहा हूं। वर्तमान स्क्रीन को सहेजना मेरे लिए एक दर्दनाक दर्द बन जाता है। मेरे पास व्यू कंट्रोलर है, दृश्य नियंत्रक के शीर्ष पर मैंने अपना UIIMAGEView और UIView (चित्रकारी दृश्य) लोड किया है। अब ऐसा लगता है जैसे मैं UIImageView के शीर्ष पर चित्रित कर रहा हूं।जीएलपीेंट सेव फंक्शन (पृष्ठभूमि छवि के साथ वर्तमान स्क्रीन को सहेजें)

मैंने इस प्रश्न के साथ अपना वर्तमान चित्र GLPaint save image प्राप्त करने में कामयाब रहा है। जब मैं अपने वर्तमान चित्र को कैप्चर करने का प्रयास करता हूं तो मुझे अपना चित्र मिलता है लेकिन एक ब्लैक स्क्रीन के साथ। मैं जो चाहता हूं वह पृष्ठभूमि छवि (UIImageView) के साथ मेरा चित्र है। क्या मुझे UIIiewView के साथ UIView ओवरले करना चाहिए?

उत्तर

2

आपको ओपनजीएल का उपयोग करके अपनी छवि लोड करनी चाहिए, UIKit (UIImageView के रूप में) नहीं। अन्यथा, आप केवल एक अलग छवि के रूप में OpenGLView को कैप्चर करने में सक्षम होंगे, साथ ही यूआईकिट व्यू को एक अलग छवि के रूप में कैप्चर करने में सक्षम होंगे।

ऐसा करने के लिए, आपको अपनी छवि को GLpaint उदाहरण में प्रदान की गई चित्रकारी व्यू क्लास में एक बनावट में प्रस्तुत करना होगा और फिर अपने ड्राइंग व्यू पर एक ट्रैक्टर खींचकर इसे लोड करना होगा।

0

मैं ओपन से मेरी छवि हड़पने के लिए इस कोड का उपयोग:

-(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 =

-(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; 
} 

और यह एक एक पृष्ठभूमि छवि के साथ मर्ज करने [आत्म विलय छवि: पृष्ठभूमि छवि के साथ छवि [स्वयं glToUIImage]];

संबंधित मुद्दे