开发者

How to scale up a PDF containing a vector-based graphic drawn by CGContextDrawPDFPage in Cocoa Touch

开发者 https://www.devze.com 2023-01-07 21:42 出处:网络
ok so here is what I want to do: Load a PDF containing a vector graphic Scale it up Draw it to a graphics context

ok so here is what I want to do:

  • Load a PDF containing a vector graphic
  • Scale it up
  • Draw it to a graphics context
  • Create a UIImage from the result and present it

Everything works fine, except the fact that the graphic loses quality and looks pixelized :(

Here is the code where the scaling happens:

// PDF loaded before
CGPDFPageRef page = CGPDFDocumentGetPage (document, 1);

UIGraphicsBeginImageContext(CGSizeMake(width, height)); 

CGContextRef context = UIGraphicsGetCurrentContext();   
CGContextSaveGState(context);

CGRect rect = CGPDFPageGetBoxRect(page, kCGPDFCropBox);
float widthFactor = width/ rect.size.width; 
float heightFactor = height/ rect.size.height;
CGAffineTransform pdfTransform2 = CGAffineTransformMakeScale (widthFactor, hei开发者_开发技巧ghtFactor);
CGContextConcatCTM(context, pdfTransform2);

CGContextDrawPDFPage(context, page);
CGContextRestoreGState(context);

retValue = UIGraphicsGetImageFromCurrentImageContext();  
UIGraphicsEndImageContext();

I think the problem is that I can only rescale the context, not the actual PDF. Is there any other way to do that without quality loss?

Thank you so much for any hint!


it's me again, the one who asked the question. I couldn't recover my account, so I created a new one...

Ok here's the answer: search the Xcode documentation for the sample project called ZoomingPDFViewer. It contains everything you need to scale a PDF document without quality loss.


You may be messing up the proportions of the image. I.e., when you scale with:

CGAffineTransform pdfTransform2 = CGAffineTransformMakeScale (widthFactor, heightFactor);

try using one scale only:

CGAffineTransform pdfTransform2 = CGAffineTransformMakeScale (widthFactor, widthFactor);
0

精彩评论

暂无评论...
验证码 换一张
取 消