Mac OS X 10.7.4Mac OS X: dibujar en un NSGraphicsContext fuera de pantalla usando las funciones CGContextRef C no tiene ningún efecto. ¿Por qué?
Estoy dibujando en un contexto de gráficos fuera de pantalla creado a través de +[NSGraphicsContext graphicsContextWithBitmapImageRep:]
.
Cuando dibujo en este contexto gráfico usando la clase NSBezierPath
, todo funciona como se esperaba.
Sin embargo, cuando dibujo en este contexto gráfico usando las funciones CGContextRef
C, no veo resultados de mi dibujo. Nada funciona.
Por razones que no entraré, realmente necesito dibujar usando las funciones CGContextRef
(en lugar de la clase Cocoa NSBezierPath
).
Mi ejemplo de código se enumera a continuación. Estoy intentando dibujar una simple "X". Un golpe usando NSBezierPath
, un golpe usando CGContextRef
funciones C. El primer trazo funciona, el segundo no. ¿Qué estoy haciendo mal?
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];
Gracias Kurt. Sí, estabas en lo correcto en tu suposición, estoy intentando diagramar 'img'. Además: su solución es correcta y soluciona el problema. ¡Gracias por aclarar esto! –