私の質問は、私たちはCGBitmapContextCreate
を使用してデバイスの解像度よりも大きな画像を保存することができますどのように知っていただきたいと思い、このlinkiPhoneのデバイス解像度よりも大きな画像を保存する方法は?
に関連しています。
ガイダンスのサンプルコードは大変ありがとうございます。
ありがとうございました!
私の質問は、私たちはCGBitmapContextCreate
を使用してデバイスの解像度よりも大きな画像を保存することができますどのように知っていただきたいと思い、このlinkiPhoneのデバイス解像度よりも大きな画像を保存する方法は?
に関連しています。
ガイダンスのサンプルコードは大変ありがとうございます。
ありがとうございました!
CGBitmapContextCreateを使用せず、UIGraphicsBeginImageContextWithOptionsを使用すると、はるかに簡単です。 UIGraphicsBeginImageContextには3つのパラメータがある
UIGraphicsBeginImageContextWithOptions(CGSizeMake(width, height), YES, 1.0f);
CGContextRef context = UIGraphicsGetCurrentContext();
//do your drawing
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEdnImageContext();
//your resultant UIImage is now stored in image variable
: - これはイメージが透明性を持っているかどうかはあなたが
をしたい何もすることができます
画像のサイズ、このようにそれを使用します
画像のピクセルのスケール。 0.0がデフォルトであるため、iPhone 3GSでは1.0になり、iPhone 4では網膜ディスプレイで2.0になります。あなたが望む任意の縮尺で渡すことができます。したがって、5.0を渡すと、Retinaディスプレイの1ピクセルが実際にスクリーン上に2x2ピクセルであるように、イメージの各ピクセル単位は実際にはビットマップの5x5ピクセルになります。
編集:それはUIGraphicsBeginImageContext()はスレッドセーフであるかどうかの質問は少し物議を醸すように思われることが判明しました。バックグラウンドスレッドでこれを同時に実行する必要がある場合は、ここでCGBitMapContextCreate()を使用する代わりの方法(かなり複雑なアプローチ)があります。UIGraphicsBeginImageContext vs CGBitmapContextCreate
これは良い解決策ではありません。 UIGraphicsBeginImageContextと他のUI ...関数はスレッドセーフではなく、メイントレッドで実行されています。この機能を使用すると、アプリケーションのUIがフリーズします。 –
スレッドについては誰が言ったのですか?とにかく、あなたがスレッド化されたコンテキストでそれを使う必要があれば、@ synchronizedブロックにUIGraphicsBeginImageContext()をラップし、CGContextRefを取得したら実際の描画を行うことができます。 –
@MartinPilchそれらがすべてメインスレッドで実行されているという事実は、それらをスレッドセーフにするものです。それらは単一のスレッドからのみ呼び出されます**メインスレッド**スレッドには入っていません。 – Abizern