首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSImage -裁剪后的PDF模糊

NSImage -裁剪后的PDF模糊
EN

Stack Overflow用户
提问于 2009-02-06 23:18:11
回答 2查看 1.3K关注 0票数 2

我正在试着裁剪一个包含PDF的NSImage。在打印时,我使用NSImage的drawInRect让它只绘制我需要的内容--这很好用。

但是,现在我只想创建一个裁剪过的区域的新NSImage。我玩了一段时间,然后在CocoaBuilder上找到了下面的代码:

代码语言:javascript
复制
- (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];
}

这是可行的,但是返回的NSImage比较模糊,不再适合打印。有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-02-07 00:27:22

lockFocus/unlockFocus对图像的缓存执行光栅绘制。这就是为什么它是“模糊的”-它是低分辨率的,可能是错误的注册。你需要矢量绘图。

使用PDF工具包。首先,将每个页面的裁剪框设置为矩形。然后,您应该能够从PDFDocument的dataRepresentation创建裁剪后的NSImage。

票数 5
EN

Stack Overflow用户

发布于 2009-02-07 01:46:35

这是执行Peter Hosey回答的代码。谢谢!

代码语言:javascript
复制
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]];
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/522639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档