10

カメラロールから画像を取得してしばらく使用し、iPhone の PNG としてディスクに保存しています。おそらくメモリ不足が原因で、奇妙なクラッシュが発生しています。

PNG または JPG として保存すると違いはありますか (JPG の場合は品質を低下させるためにメモを選択したと仮定します)。具体的には:

  • PNGとして保存した場合、ディスクからリロードした後、UIImageによって使用されるメモリは増えますか?
  • PNGが保存プロセス中に一時的により多くのメモリを消費するため、保存する行為は可能ですか?

UIImage は形式に依存しない表現であり、それは問題ではないと想定していましたが、確認する必要があると思いました。

4

7 に答える 7

25

おそらくメモリ不足が原因で、奇妙なクラッシュが発生しています


次に、今していることをやめて、それが実際にクラッシュの原因であるかどうかを最初に調べます。そうしないと、クラッシュの本当の原因を無視して、存在しないメモリの問題を修正して、ここで間違った問題を追跡している可能性が非常に高くなります。クラッシュを修正したい場合は、クラッシュの原因を突き止めることから始めます。「おそらく」問題をフォローアップすることは、時間と労力の浪費のレシピです。

于 2009-04-29T17:18:01.710 に答える
10

ストアに、編集中の画像の中間バージョンを保存する必要があるアプリケーションがあります。元のバージョンでは、JPEG を複数回読み込んで保存することによる品質の低下を避けるために、保存に PNG 形式を使用しました。

2.2 ソフトウェア リリースの頃、Apple は PNG 書き込みコードに変更を導入しました。これにより、一部の画像から PNG データを保存するのに何倍もの時間がかかるようになりました。終了時に画像を保存しようとしたときにアプリケーションがタイムアウトしたため、JPEG形式での保存に変更する必要がありました。

また、PNG 形式で保存すると UIImage の「方向」情報が保持されないため、問題が発生します。そのため、内蔵カメラで縦方向に撮影した写真は、保存して再読み込みした後に回転して表示されます。

于 2009-04-29T19:19:51.700 に答える
6

扱っている画像の種類によって異なります。写真画像を扱っている場合、ほとんどの場合、JPEG は PNG よりも小さく、人間の目で見られるように細部が失われることはありません。

逆に、GUI 要素や単色の大きなブロックを含む画像など、非常に非写真的な画像を扱っている場合、PNG と JPEG はサイズが同等になりますが、PNG は損失なしで保存されますが、JPEG は損失が多く、非常に目に見えるアーティファクト。非常に単純な画像 (一定の色の非常に大きなブロックなど) がある場合、PNG は JPEG よりもはるかに小さい可能性が高く、圧縮アーティファクトもありません

画像を PNG または JPEG として保存する操作は、一時的なメモリをあまり消費しないはずです。画像がメモリにある場合、レンダリングするたびに解凍する必要がなく、画面にすばやく描画できるように、通常は非圧縮でメモリに保存されます。圧縮されていないイメージのサイズと比較すると、イメージを圧縮するために必要な追加の一時ストレージの量は非常に小さくなります。圧縮されていない画像がメモリに収まる場合は、圧縮中に使用されるメモリについて心配する必要はありません。

もちろん、不揮発性ストレージのファイル システムにイメージを書き込んでメモリ内イメージを解放すれば、圧縮されたイメージがどれだけ大きくても、メイン メモリを占有しなくなるため、問題になりません。 . 圧縮されたイメージのサイズは、使用しているフラッシュ ストレージの量にのみ影響するため、問題になる可能性がありますが、アプリがメモリ不足になる可能性が高い場合には影響しません。

于 2009-04-29T05:19:41.483 に答える
1

クラッシュは、UIImagePickerController の既知のメモリ リークが原因である可能性があります。

これは、それを修正するのに役立ちます。

于 2009-06-25T23:38:08.637 に答える
0

可能な限り PNG を使用してください。コンパイルの一部として、XCode はユーティリティ (pngcrush) を介してすべての PNG ファイルを実行し、それらを圧縮および最適化します。

于 2009-04-29T18:51:07.697 に答える