タイトルの通りですが、以下の2つのサンプルを組み合わせて、PDFにお絵描きしたUIImageをPDFに埋め込んでファイルとして出力しています。
PDFDocumentWatermark(PDFに画像を描く)
GraphicsDemo_Finished(フリーハンドでお絵描きする)
PdfViewの上にDemoView(お絵描き用View)が重なっているイメージです。
ところが、DemoViewの画像を以下のようなメソッドでUIImageを取得しているのですが、
画像は拡大されずに出力されてしまいます。なぜでしょうか?(特に★の部分)
c#
1 /// <summary> 2 /// 新しいコンテキストに再描画してUIImageを返す 3 /// </summary> 4 /// <returns></returns> 5 private UIImage getCurrentContextUIImage() 6 { 7 PdfPage pdfPage = PdfDocument.GetPage(0); 8 var pageBounds = pdfPage.GetBoundsForBox(PdfDisplayBox.Crop); 9 nfloat scaleFactor = PdfView.ScaleFactor; 10 Debug.WriteLine(scaleFactor, "scaleFactor"); 11 nfloat width = pageBounds.GetMaxX() / scaleFactor; 12 nfloat height = pageBounds.GetMaxY() / scaleFactor; 13 Debug.WriteLine(width, "width"); 14 Debug.WriteLine(height, "height"); 15 16 CGSize imageSize = new CGSize(width, height); 17 nfloat scale = 1 / scaleFactor; 18 //nfloat scale = 0.0f; // 0.0にすると高解像度になるっぽい https://qiita.com/ruwatana/items/473c1fb6fc889215fca3 19 //nfloat scale = 0.2f; 20 Debug.WriteLine(scale, "scale"); 21 UIGraphics.BeginImageContextWithOptions(imageSize, false, scale); // ★ imageSizeやscaleを変えても大きくならない 22 CGContext currentContext = UIGraphics.GetCurrentContext(); 23 // これをすると現在の表示内容をコンテキストに描画できる 24 Layer.RenderInContext(currentContext); 25 // 現在のグラフィックスコンテキストの画像を取得する 26 UIImage snapshot = UIGraphics.GetImageFromCurrentImageContext(); 27 // 現在のグラフィックスコンテキストへの編集を終了 28 UIGraphics.EndImageContext(); 29 30 return snapshot; 31 }
■追記
状況がわかりやすいように図を用意しました。
iOS実機の画面では画面いっぱい描いているのに、出力したPDFでは60%くらいにしかならないのです。そのために★の部分で拡大しようとしてもできなかったというわけです。(60%は上のソースでscaleFactorが0.605のためだと思われます)
◆環境
Visual Studio 2017
Xamarin 4.12
Xamarin.iOS 12.2
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。