質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

Q&A

1回答

1579閲覧

Xamarin.iOSでUIImageを拡大して出力できない

yrema

総合スコア286

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Xamarin

Xamarin(ザマリン)は、iPhoneなどのiOSやAndroidで動作し、C# 言語を用いてアプリを開発できるクロスプラットフォーム開発環境です。Xamarin Studioと C# 言語を用いて、 iOS と Android の両方の開発を行うことができます。

0グッド

0クリップ

投稿2019/04/15 02:38

編集2022/01/12 10:55

タイトルの通りですが、以下の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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

PDF出力時に画像を合成しているのでしょうか?
合成時に画像をscaleFactorの値で拡大してみてはいかがでしょうか。

投稿2019/04/15 10:23

編集2019/04/15 10:25
f-miyu

総合スコア1625

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問