[解決済み】Retinaディスプレイで画質を落とさずにUIViewからUIImageにキャプチャする方法
2022-03-30 05:08:07
質問
私のコードは、通常のデバイスでは問題なく動作しますが、網膜デバイスではぼやけた画像が作成されます。
どなたか解決策をご存じないでしょうか?
+ (UIImage *) imageWithView:(UIView *)view
{
UIGraphicsBeginImageContext(view.bounds.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
解決方法は?
の使用から
UIGraphicsBeginImageContext
から
UIGraphicsBeginImageContextWithOptions
(文書化された
このページでは
). scale (第3引数) に 0.0 を渡すと、スクリーンのスケールファクターと等しいコンテキストが得られます。
UIGraphicsBeginImageContext
は固定スケールファクター1.0を使用しているので、実際にはiPhone 4と他のiPhoneで全く同じ画像を得ることができます。iPhone 4は暗黙のうちにスケールアップする際にフィルターを適用しているのか、それとも単に周りのものよりもシャープさが欠けていることを脳が感知しているのか、どちらかだと思います。
ということですね。
#import <QuartzCore/QuartzCore.h>
+ (UIImage *)imageWithView:(UIView *)view
{
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.opaque, 0.0);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage * img = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return img;
}
そして、Swift 4では。
func image(with view: UIView) -> UIImage? {
UIGraphicsBeginImageContextWithOptions(view.bounds.size, view.isOpaque, 0.0)
defer { UIGraphicsEndImageContext() }
if let context = UIGraphicsGetCurrentContext() {
view.layer.render(in: context)
let image = UIGraphicsGetImageFromCurrentImageContext()
return image
}
return nil
}
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン