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

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

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

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

iPhone 6

iPhone 6は、2014年に発売されたアップル社のスマートフォンです。画面サイズは4.7インチあり、A8コアチップとM8モーションコプロセッサを搭載しています。

Q&A

解決済

2回答

3360閲覧

Viewに表示された内容を高画質(印刷用)でキャプチャしたい

yukaringo

総合スコア7

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

iOS

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

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

iPhone 6

iPhone 6は、2014年に発売されたアップル社のスマートフォンです。画面サイズは4.7インチあり、A8コアチップとM8モーションコプロセッサを搭載しています。

0グッド

0クリップ

投稿2015/07/05 05:38

こんにちは。
先月中旬より、自分のお店のためのiPhoneアプリを作ってみようと挑戦中です。

iphoneのディスプレイに表示されているViewをそのまんま綺麗に印刷したいです。
印刷データなので解像度が高くないといけないので、Viewのコンテキストを4倍にし、キャプチャ画像を取得するということをしたいのですが、
View上にUILabelを配置しているのですが、できあがりの画像をピクセル等倍でphotoshopで表示してみたら、鮮明ではありませんでした。
photoshopでいうとラスタライズ済みの画像を引き伸ばした感じの画像になってしまう感じです。

photoshopでラスタライズ前、解像度を高くすると、文字レイヤーもそれに伴い解像度UPするように、Viewに配置している全てのアイテムが、それぞれ4倍の大きさになり、高画質に再描画され、そのViewをキャプチャできたらな〜と思うのですが、そんな簡単にはできないでしょうか…。

lang

1 CGRect rect = view.bounds; 2 3 UIGraphicsBeginImageContextWithOptions(rect.size, NO, 4);//(1)4倍に拡大 4 5 CGContextRef ctx = UIGraphicsGetCurrentContext();//(2)現在のコンテキストを得る 6 7 CGContextFillRect(ctx, rect);//(3)指定された範囲(CGRect)を描画 8 9 [view.layer renderInContext:ctx];//(4)対象Viewの描画内容をContextに複写 10 11 NSData *data = UIImagePNGRepresentation(UIGraphicsGetImageFromCurrentImageContext()); 12 13 UIImage *capture = [UIImage imageWithData:data]; 14 15 UIGraphicsEndImageContext();

最初に、
view.transform = CGAffineTransformMakeScale(4, 4);
とし、Viewを4倍にしする処理を入れてみましたが、出来上がった画像に違いはありませんでした。

あまり理解していないのにやっているのがいけないのですが、手詰まり感があるので、質問をさせていただきました。
ヒントをいただけると大変嬉しく思います。
初心者故、的はずれなことを書いていたらすみません。
何卒よろしくお願いいたします。

Xcode6.3.2
iOS Simulator iOS8.3/iPhone6

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

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

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

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

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

guest

回答2

0

UIGraphicsBeginImageContextWithOptions()の第一引数で、その画像のサイズが決定します。
画像サイズを4倍にしたいなら、第一引数を4倍にしてください。

投稿2015/07/05 06:25

Stripe

総合スコア2183

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

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

yukaringo

2015/07/10 22:09 編集

大変お礼が遅くなりました。教えていただいてありがとうございます。 UIGraphicsBeginImageContextWithOptionsの前に、 view.transform = CGAffineTransformMakeScale(4, 4); とし、Viewを4倍にし、第一引数にこの4倍したViewのサイズを設定しましたが、望むような結果は得られませんでした。 CGAffineTransformMakeScaleだと、拡大前のものがビットマップ化されて、引き伸ばされる感じなんですよね。 View上にあるアイテムを全て一つ一つ4倍の大きさにサイズ変更をしてから、等倍でコンテキストを得て、キャプチャ画像を取得することにしました。 ありがとうございました。
Stripe

2015/07/11 01:50

グラフィックの描き直しは、ちゃんとやっていますか?描き直さないと、高解像度になりませんよ。
yukaringo

2015/07/13 00:59

ありがとうございます。 view.transform = CGAffineTransformMakeScale(4, 4); のあと、 [view setNeedsDisplay]; としてみましたが、上手くできませんでした。 初心者なりにいろいろと試行錯誤してみましたが、うまくいかないので、 View上にあるアイテムを全て一つ一つ4倍の大きさにサイズ変更をしてから、等倍でコンテキストを得て、キャプチャ画像を取得するのが、唯一成功した解決法でした。 ありがとうございました。
guest

0

ベストアンサー

うろ覚えなので詳細は公式の資料に当たってもらいたいのですが、
UIView系のコントロールは、対象デバイスのピクセル数に合わせて最適化されるようになっているはずです。

なので、どんなにソースの解像度を上げても、実際にViewにレンダリングされるときはそのデバイスの最高値でかつ、表示されるサイズに最適化されるはずです。

もしも、高解像度のものを印刷したいのであれば、印刷用のデータを別途生成して(PDFとかで)そこで解像度の高い画像を利用するなどしなければならないと思います。

投稿2015/07/05 06:27

rifuch

総合スコア1901

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

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

yukaringo

2015/07/10 22:14

大変遅くなりました。教えていただいてありがとうございます。 キャプチャ用の4倍の大きさのViewを作成し、 View上にあるアイテムを全て一つ一つ4倍の大きさにサイズ変更をしてから、等倍でコンテキストを得て、キャプチャ画像を取得することにしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問