2011-10-21 4 views
7

मेरे पास एक कैलियर (containerLayer) है जो मैं एक फ्लैट फ़ाइल के रूप में डेटा को सहेजने से पहले NSBitmapImageRep में कनवर्ट करना चाहता हूं। containerLayer में इसकी geometryFlipped संपत्ति YES पर सेट है, और ऐसा लगता है कि समस्याएं उत्पन्न हो रही हैं। अंततः जेनरेट की गई पीएनजी फ़ाइल सामग्री को सही ढंग से प्रस्तुत करती है, लेकिन ऐसा लगता है कि फ़्लिप की गई ज्यामिति को ध्यान में नहीं रखा जाता है। मैं स्पष्ट रूप से बाईं ओर दिखाए गए सामग्री का सटीक रूप से प्रतिनिधित्व करने के लिए test.png की तलाश में हूं।कैलियर के रेंडरइन कॉन्टेक्स्ट का उपयोग करना: ज्यामिति के साथ विधि

नीचे संलग्न समस्या का एक स्क्रीनशॉट है और जिस कोड के साथ मैं काम कर रहा हूं।

A visual example

- (NSBitmapImageRep *)exportToImageRep 
{ 
    CGContextRef context = NULL; 
    CGColorSpaceRef colorSpace; 
    int bitmapByteCount; 
    int bitmapBytesPerRow; 

    int pixelsHigh = (int)[[self containerLayer] bounds].size.height; 
    int pixelsWide = (int)[[self containerLayer] bounds].size.width; 

    bitmapBytesPerRow = (pixelsWide * 4); 
    bitmapByteCount = (bitmapBytesPerRow * pixelsHigh); 

    colorSpace = CGColorSpaceCreateWithName(kCGColorSpaceGenericRGB); 
    context = CGBitmapContextCreate (NULL, 
            pixelsWide, 
            pixelsHigh, 
            8, 
            bitmapBytesPerRow, 
            colorSpace, 
            kCGImageAlphaPremultipliedLast); 
    if (context == NULL) 
    { 
     NSLog(@"Failed to create context."); 
     return nil; 
    } 

    CGColorSpaceRelease(colorSpace); 
    [[[self containerLayer] presentationLayer] renderInContext:context];  

    CGImageRef img = CGBitmapContextCreateImage(context); 
    NSBitmapImageRep *bitmap = [[NSBitmapImageRep alloc] initWithCGImage:img]; 
    CFRelease(img); 

    return bitmap;  
} 

संदर्भ के लिए, कोड है कि वास्तव में उत्पन्न NSBitmapImageRep बाहर बचाता है:

NSData *imageData = [imageRep representationUsingType:NSPNGFileType properties:nil]; 
[imageData writeToFile:@"test.png" atomically:NO]; 

उत्तर

6

आप गंतव्य संदर्भ फ्लिप करने आप इसे में प्रस्तुत करना पहले की जरूरत है।

CGAffineTransform flipVertical = CGAffineTransformMake(1, 0, 0, -1, 0, pixelsHigh); 
CGContextConcatCTM(context, flipVertical); 
[[[self containerLayer] presentationLayer] renderInContext:context]; 
:

अद्यतन इस के साथ अपने कोड, मैं सिर्फ एक ही समस्या का समाधान कर लिया

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