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

不问归期 提交于 2020-01-13 20:12:44

问题


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, heightFactor);
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!


回答1:


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.




回答2:


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);


来源:https://stackoverflow.com/questions/3251348/how-to-scale-up-a-pdf-containing-a-vector-based-graphic-drawn-by-cgcontextdrawpd

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!