2013-04-16 21 views
11

サイズを制限せずに写真を選択して編集できるようにします。iOSで大きな画像を扱う

私の考えは、編集用の画面と同じサイズの大きな写真のサムネイルを作成し、編集が終わったら大きな写真を使ってサムネイルで実行されたのと同じ編集をすることです。

UIGraphicsBeginImageContextを使用してサムネイル画像を作成すると、メモリに問題が発生します。

ハードウェアの限界のために大きな画像全体を直接編集するのは難しいことを知っていますので、大きな画像を2048 * 2048未満のメモリ問題にダウンサンプリングできる方法があるかどうかを知りたいのですか?

BitmapFactoryクラスには、Androidプラットフォームで写真をダウンサンプリングできるinSampleSizeオプションがあります。これはiOSでどのようにすることができますか?

+0

NSData * data = [NSData dataWithContentsOfFile:パスオプション:NSDataReadingMappedAlwaysエラー:&エラー]を使用できます。画像データをメモリにロードせずにアクセスする。 – Sten

+0

Stenのチップのおかげで、NSDataReadingMappedAlwaysオプションを使ってみましたが、まだ10000 * 10000のイメージでクラッシュしています。イメージをロードする方法に関係なく、UIGraphicsBeginImageContextを使用して原点イメージを拡大し、メモリ内のビットマップ全体を必要とします。 jpeg/pngファイルをメモリに読み込む際に画像をダウンサンプリングする方法はありますか? – lingtianlan

答えて

8

使用されたメモリの量)。次にCGContextDrawImageを使用して宛先のコンテキストにCGImageCreateWithImageInRectを使用して元の画像(これは画像データの一部がメモリにロードされる場所)からタイルを何回も繰り返し処理する必要があります。

this sample code from Appleを参照してください。

+0

優れていますが、このトピックについてはAppleのコード例よりも信頼できるものです。 – DarkDust

0

Trevor Harmonがこの作品を見てください。それは私のアプリのパフォーマンスを改善しました。私はそれもあなたのために働くと信じています。あなたが実際に(そう、これが可能になるメモリにイメージをロードして、あなたが望む結果のイメージのサイズでビットマップのコンテキストを作成しませんUIImageを使用して画像の読み込みを処理する必要が

https://github.com/coryalder/UIImage_Resize

+0

これは既にメモリ内のUIImage上で動作しているので、どのようにメモリの問題を回避できますか? – DarkDust

1

大きな画像はメモリに収まりません。したがって、それらをメモリにロードしてサイズを変更しても機能しません。

非常に大きな画像を扱うには、それらをタイルする必要があります。例えば、すでにそこに解決策の多くこれはあなたの問題を解決できるかどうかを確認:

https://github.com/dhoerl/PhotoScrollerNetwork

私は自分のカスタムソリューションを実装するが、それは、私たちはすでに&を画像タイラ実行中のサーバ側を持っていた私たちの環境に特異的でした(メダ・サーバ、それは本当にクールです)

タイルの仕組みは、基本的には可視のピクセルをメモリに保持するだけで、それらの多くはありません。現在表示されていないすべてのタイルは、そのままディスクキャッシュまたはフラッシュメモリキャッシュに取り込まれます。

関連する問題