问题
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