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?

¿Fue útil?

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]];
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top