2010-07-14 12 views
2

ok Voici donc ce que vectoriel je veux faire:Comment mettre à l'échelle un PDF contenant un graphique dessiné par CGContextDrawPDFPage dans Cocoa Touch

  • Charge un fichier PDF contenant un graphique vectoriel
  • Scale it up
  • Dessiner à un contexte graphique
  • Créer un UIImage du résultat et de le présenter

Tout fonctionne très bien, à l'exception du fait que l'image perd la qualité et semble pixelisé :(

Voici le code où l'échelle se produit:

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

Je pense que le problème est que je ne peux rééchelonner le contexte, et non le PDF réel. Y a-t-il un autre moyen de le faire sans perte de qualité?

Merci beaucoup pour tout indice!

+1

Avez-vous déjà découvert cela? – Kalle

Répondre

0

il est encore moi, celui qui a posé la question. Je n'ai pas pu récupérer mon compte, alors j'en ai créé un nouveau ...

Ok, voici la réponse: recherchez dans la documentation de Xcode l'exemple de projet appelé ZoomingPDFViewer. Il contient tout ce dont vous avez besoin pour mettre à l'échelle un document PDF sans perte de qualité.

+1

Vous pourriez obtenir de l'aide pour récupérer votre ancien compte si vous le demandez sur [meta] (http://meta.stackoverflow.com/); ou, je pourrais fusionner votre ancien compte dans celui-ci. @will moi de retour si vous voulez une fusion. – Will

+0

Merci d'ailleurs, je pourrais restaurer mon compte :) –

0

Vous risquez de bousiller les proportions de l'image. À savoir, lorsque vous redimensionnez avec:

CGAffineTransform pdfTransform2 = CGAffineTransformMakeScale (widthFactor, heightFactor); 

essayer d'utiliser une seule échelle:

CGAffineTransform pdfTransform2 = CGAffineTransformMakeScale (widthFactor, widthFactor);