NSImage - después de la cosecha PDF es borrosa
Pregunta
Estoy intentando recortar una NSImage que contiene un PDF. Al imprimir estoy usando drawInRect de NSImage tenga que dibujar sólo lo que necesito -. Y esto funciona muy bien
Sin embargo, ahora en lugar Estoy intentando crear un nuevo NSImage de sólo el área recortada. He jugado con él durante un tiempo, y luego encontré este código en CocoaBuilder:
- (NSImage *) imageFromRect: (NSRect) rect
{
NSAffineTransform * xform = [NSAffineTransform transform];
// translate reference frame to map rectangle 'rect' into first quadrant
[xform translateXBy: -rect.origin.x
yBy: -rect.origin.y];
NSSize canvas_size = [xform transformSize: rect.size];
NSImage * canvas = [[NSImage alloc] initWithSize: canvas_size];
[canvas lockFocus];
[xform concat];
// Get NSImageRep of image
NSImageRep * rep = [self bestRepresentationForDevice: nil];
[rep drawAtPoint: NSZeroPoint];
[canvas unlockFocus];
return [canvas autorelease];
}
Esto funciona, pero el NSImage devuelto es borrosa, y ya no es adecuado para la impresión. ¿Alguna idea?
Solución
lockFocus
/ unlockFocus
realiza trama de dibujo para la memoria caché de la imagen. Es por eso que es de baja resolución “borrosa” -Es y, posiblemente, problemas de registro. Es necesario dibujo vectorial.
Kit de Uso PDF. En primer lugar, establecer el cuadro de recorte de cada página a su rectángulo. A continuación, debería ser capaz de crear su recortada NSImage del dataRepresentation
del PDFDocument.
Otros consejos
Este es el código para llevar a cabo lo que respondió Peter Hosey. Gracias!
PDFDocument *thePDF = [[PDFDocument alloc] initWithData:pdfData];
PDFPage *thePage = [thePDF pageAtIndex:0];
NSRect pageCropRect = NSMakeRect(0, 100, 100, 100);
[thePage setBounds:pageCropRect forBox:kPDFDisplayBoxMediaBox];
NSImage *theCroppedImage = [[NSImage alloc] initWithData:[thePage dataRepresentation]];