मैक ओएस एक्स 10.7.4मैक ओएस एक्स: CGContextRef C फ़ंक्शंस का उपयोग करते हुए एक ऑफस्क्रीन NSGraphicsContext में चित्रण का कोई प्रभाव नहीं पड़ता है। क्यूं कर?
मैं +[NSGraphicsContext graphicsContextWithBitmapImageRep:]
के माध्यम से बनाए गए ऑफस्क्रीन ग्राफिक्स संदर्भ में आ रहा हूं।
जब मैं NSBezierPath
कक्षा का उपयोग करके इस ग्राफिक्स संदर्भ में आकर्षित करता हूं, तो सब कुछ अपेक्षित काम करता है।
हालांकि, जब मैं CGContextRef
सी फ़ंक्शन का उपयोग करके इस ग्राफिक्स संदर्भ में आकर्षित करता हूं, तो मुझे अपने चित्र का कोई परिणाम नहीं दिखता है। कुछ भी काम नहीं करता है।
कारणों से मैं अंदर नहीं जाऊंगा, मुझे वास्तव में CGContextRef
फ़ंक्शंस (कोको NSBezierPath
कक्षा के बजाए) का उपयोग करने की आवश्यकता है।
मेरा कोड नमूना नीचे सूचीबद्ध है। मैं एक साधारण "एक्स" खींचने का प्रयास कर रहा हूं। NSBezierPath
का उपयोग करके एक स्ट्रोक, CGContextRef
सी फ़ंक्शंस का उपयोग करके एक स्ट्रोक। पहला स्ट्रोक काम करता है, दूसरा नहीं करता है। मैं क्या गलत कर रहा हूं?
NSRect imgRect = NSMakeRect(0.0, 0.0, 100.0, 100.0);
NSSize imgSize = imgRect.size;
NSBitmapImageRep *offscreenRep = [[[NSBitmapImageRep alloc]
initWithBitmapDataPlanes:NULL
pixelsWide:imgSize.width
pixelsHigh:imgSize.height
bitsPerSample:8
samplesPerPixel:4
hasAlpha:YES
isPlanar:NO
colorSpaceName:NSDeviceRGBColorSpace
bitmapFormat:NSAlphaFirstBitmapFormat
bytesPerRow:0
bitsPerPixel:0] autorelease];
// set offscreen context
NSGraphicsContext *g = [NSGraphicsContext graphicsContextWithBitmapImageRep:offscreenRep];
[NSGraphicsContext setCurrentContext:g];
NSImage *img = [[[NSImage alloc] initWithSize:imgSize] autorelease];
CGContextRef ctx = [g graphicsPort];
// lock and draw
[img lockFocus];
// draw first stroke with Cocoa. this works!
NSPoint p1 = NSMakePoint(NSMaxX(imgRect), NSMinY(imgRect));
NSPoint p2 = NSMakePoint(NSMinX(imgRect), NSMaxY(imgRect));
[NSBezierPath strokeLineFromPoint:p1 toPoint:p2];
// draw second stroke with Core Graphics. This doesn't work!
CGContextBeginPath(ctx);
CGContextMoveToPoint(ctx, 0.0, 0.0);
CGContextAddLineToPoint(ctx, imgSize.width, imgSize.height);
CGContextClosePath(ctx);
CGContextStrokePath(ctx);
[img unlockFocus];
धन्यवाद कर्ट। हां, आप अपनी धारणा में सही थे, मैं 'img' diaplay करने का प्रयास कर रहा हूं। इसके अलावा: आपका फिक्स सही है और समस्या को हल करता है। इसे साफ़ करने के लिए धन्यवाद! –