Как увеличить PDF-файл, содержащий векторную графику, нарисованную CGContextDrawPDFPage в Cocoa Touch - PullRequest
2 голосов
/ 15 июля 2010

хорошо, вот что я хочу сделать:

  • Загрузить PDF, содержащий векторную графику
  • Увеличить
  • Нарисуйте его в графическом контексте
  • Создать UIImage из результата и представить его

Все отлично работает, за исключением того, что графика теряет качество и выглядит в пикселях: (

Вот код, где происходит масштабирование:

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

Мне кажется, проблема в том, что я могу только изменить масштаб контекста, а не фактический PDF. Есть ли другой способ сделать это без потери качества?

Большое спасибо за любую подсказку!

Ответы [ 2 ]

0 голосов
/ 24 марта 2011

это снова я, тот, кто задал вопрос.Я не смог восстановить свою учетную запись, поэтому я создал новую ...

Хорошо, вот ответ: поищите в документации по Xcode пример проекта ZoomingPDFViewer .Он содержит все необходимое для масштабирования документа PDF без потери качества.

0 голосов
/ 22 марта 2011

Вы можете испортить пропорции изображения. То есть, когда вы масштабируете с помощью:

CGAffineTransform pdfTransform2 = CGAffineTransformMakeScale (widthFactor, heightFactor);

попробуйте использовать только одну шкалу:

CGAffineTransform pdfTransform2 = CGAffineTransformMakeScale (widthFactor, widthFactor);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...