問題タブ [bitmapfactory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
13142 参照

android - Android - BitmapFactory.decodeByteArray - OutOfMemoryError (OOM)

OOM の問題に関する何百もの記事を読みました。ほとんどは大きなビットマップに関するものです。256x256天気オーバーレイ タイルをダウンロードするマッピング アプリケーションを実行しています。ほとんどは完全に透明で、非常に小さいです。呼び出し中に 442 バイト長のビットマップ ストリームでクラッシュが発生しましたBitmapFactory.decodeByteArray(....).

例外は次のように述べています。

コードは次のとおりです。

デバッガーに表示される内容は次のとおりです。

したがって、ビットマップ データは 442 バイトです。23671KB のビットマップを作成しようとしてメモリ不足になるのはなぜですか?

0 投票する
4 に答える
9277 参照

android - BitmapFactory はソースよりも大きな画像を返します

こんにちは、という名前のpng画像からビットマップを作成していますimage.png。画像の寸法は 75 (幅) x 92 (高さ) です。このコードを実行すると:

ロガーのログ:

画面上の画像は、寸法が 75 x 92 の他の画像よりも大きいです。Android に正しい寸法の画像をロードさせるにはどうすればよいですか?

0 投票する
2 に答える
3451 参照

android - Androidでjpegをcmykカラー形式でデコードする方法は?

CMYKカラー形式のjpegをデコードしようとしています。BitmapFactoryはnullを返します。私はグーグルで回りましたが、運がありませんでした。Androidチームがあらゆる種類のカラーフォーマットをサポートする適切な仕事をしていなかった可能性はありますか?

私はAndroid2.2を使用しています。

どうもありがとう。

0 投票する
2 に答える
3031 参照

android - BitmapFactory.decodeFile() を使用しますが、画像はデコードされません

私の問題は、ギャラリーから画像を取得し、画像をビットマップに変換するために BitmapFactory.decodeResource() を使用することですが、問題は、画像がエミュレーターで取得されますが、実際のデバイスでは取得されず、実際のデバイスではビットマップ値が null になることです。以下はギャラリー画像をデコードするための私のコードです。

任意のヘルプをいただければ幸いです。

0 投票する
2 に答える
921 参照

android - 一見一貫性のないOutOfMemoryがさまざまなAndroidデバイスでクラッシュする

組み込みのゲームエディタでは、ユーザーが任意のスプライトをレベルに配置できるため、開始時にすべてのビットマップをロードする必要があるゲームを作成しています。また、レベルは、各レベルのスプライトのグループを動的にロードできるシステムなしで、さまざまなスプライトを使用します。

しばらくすると、ゲームにはすでに250以上のpng画像があり、合計サイズは3.5MBです。

ゲームは、オプションを設定せずにBitmapFactory.decodeStreamを使用してほとんどのスプライト(約200)をロードします。また、アクティビティのxmlレイアウトで参照される他のスプライトは約50あります。

さまざまなデバイスでテストすると、ゲームのメモリが不足することがありますが、パターンを見つけることができず、画像のサイズや数を減らすなど、どれだけ行う必要があるかを判断することさえできません。

私が開発した電話、Android 2.224MBVMヒープサイズのHTCdesireはOOMを実行しません。

Android2.2および40MBのVMヒープサイズを備えたDellStreakも、OOMを実行することはありません。

Android2.1および24MBVMヒープサイズを備えたMotorolaマイルストーンは、すべてのスプライトを正常にロードしますが、アクティビティの1つを開始するときにImageViewで使用される最後のいくつかのイメージをチョークします(スタートメニュー)。そのようなImageViewのいくつかをコメントアウトすると、ロードは問題ありませんが、後で他のアクティビティの1つで窒息する可能性があります。また、起動によって断片化が異なるため、安定していません。

私の相棒が2.2のHTCヒーロー(ヒープサイズは16MBですか?)もクラッシュします。

最も紛らわしいのは、モトローラがHTCの要望と同じ24MBを持っていることです。2.1はメモリ管理の効率を低下させていますか?(たとえば、より多くの断片化につながりますか?)または、すべてのMotorola電話でメモリ管理が悪化しますか?では、なぜ2.2のHTCヒーローがクラッシュするのでしょうか。HTCヒーローよりもHTCの欲求の方が大きいのは何ですか?

OOMは古い電話で発生するように見えますが、これまで私が理解したのはそれだけです。

OOMが市場の5%などの古い電話でのみ発生する場合は、クラッシュレポートを収集し、サポートされているリストからクラッシュしたものをすべて除外するだけで、サポートされているデバイスから2.1以上の特定のリストを除外できます。それ以外の場合は、すべての画像を一定の係数(1.6など)で縮小する必要があります。これは、設計とテスト、GUI要素の再配置などに何日もかかった45レベルすべてのサイズを変更することを意味します。 dまだわかりません。どのデバイスで、ビットマップの合計サイズをたとえば2倍に減らすだけで、OOMを回避できます。

これについて何かアドバイスはありますか?BitmapFactoryに特定のオプションを設定する必要がありますか?ところで、ほとんどの画像には透明なbgピクセルがあり、私が理解している限り、565形式で取得することはできません。

私はここや他の場所で2日間ブラウジングしましたが、それでも途方に暮れています。

ありがとうございました。

0 投票する
1 に答える
649 参照

android - Android:代替GIFローダー?

Androidで画像を読み込みたいのですが、画像が大きすぎる場合は、読み込むにサイズを変更したいと思います。BitmapFactoryを使用して画像のサイズだけを取得し、次に適切なスケーリング係数を計算し、BitmapFactoryを使用して必要なサイズの画像を読み込むことができることを学びました(この関連スレッドで見つけた非常に有能な提案に従って) 。

それで私はそれを試みました、そしてそれは働くことを拒否しました。私はこの1時間、コードを調べて、このような単純な操作がまったく効果がない理由を理解しようとしました(スケーリング係数は完全に無視されていました!)

それから私はAndroidの問題3072に出くわしました...これは2年以上もの間GIFファイルで壊れていると識別されていることがわかりました。GIFは完全に最新ではないことはわかっていますが、まだ存在し、広く使用されています(私のテストセットには多くのGIFが含まれているため、バグレポートが見つかるまでは一律に壊れているように見えました)。

私の質問は、スケーリング係数が使用されている場合にGIFファイルを黙って無視せずに正しく読み取り、サイズ変更するBitmapFactoryの代わりに何を使用できるかということです。メモリの制約により、大きな画像を直接ロードしてさらに処理することはできないため、これはストリーミングソリューションである必要があります。

私の他の質問は、このような古い未修正のバグに遭遇し、それを認識していないか、さらに悪いことに、APIに依存して要求された機能を正確に実行し、メモリリークやその他の奇妙な驚きをもたらす人がどれほどいるかということです。

0 投票する
1 に答える
2639 参照

android - Android ImageView setImageBitmap

メモリをより効率的に使用するために、Android が画像を処理する方法をよりよく理解しようとしています。に画像が保存されており、それを表示するためにBitmap使用しています。ImageView.setImageBitmap()ここでの問題は、Bitmap私が渡したものを将来使用するのか、それともコピーを作成していて、Bitmap私が作成したものは呼び出し後に使用されなくなったのsetImageBitmapかということです。

Bitmap私が渡したへの参照を保持すると仮定すると、オプションを使用してBitmap作成された場合、どのように動作しますか? がメモリから一時的に消去されないようにしますか? 状態がある場合にのみ発生しますか、それともandの場合にも発生しますか? それとも、画面に表示されている間だけですか?BitmapFactoryinPurgeableImageViewBitmapImageViewView.VISIBLEView.GONEView.INVISIBLEImageView

もう 1 つ、Android のソース コードを調べると、エンコードされたバイト データが常にメモリにコピーされていることがわかります (inInputShareableは現在無視されています)。Android Java アプリケーションの 16/24MB メモリ制限にカウントされますか?

ありがとう

0 投票する
1 に答える
351 参照

android - インターネット経由の Android BitmapFactory

インターネットから画像をダウンロードして、画面上で拡大縮小して表示しています。アイデアは、inSampleSize を使用して、解凍中に大きな画像をスケーリングし、OutOfMemory 例外を防ぐことです。しかし、inSampleSize を見つけるには、画像の解像度を知る必要があります。inJustDecodeBounds オプションを使用して取得できます。

問題は、ストリームを渡してインターネットから画像を直接ダウンロードできないことです。これは、画像が 2 回ダウンロードされるためです (最初にサイズを取得し、次にスケーリングされたビットマップを取得するため)。画像のサイズが大きい可能性があるため、画像をダウンロードして RAM に保存できません。残っている唯一の解決策は、イメージを SD カード/内部メモリにダウンロードしてそこから読み取ることですが、ユーザーがスペースを残さないと、悪いことが起こります。

問題は、ストレージと RAM メモリに依存せずに、イメージを 2 回ダウンロードする必要がない方法はないかということです。それとも、BitmapFactory が inJustDecodeBounds を使用しているときにイメージ全体をダウンロードせず、ヘッダーだけをダウンロードするのでしょうか?

ありがとう

0 投票する
2 に答える
2755 参照

android - AndroidでBitmapFactoryを使用してビットマップをロードする際の問題を調査するにはどうすればよいですか?「entryIndexが原因でgetEntryが失敗します...」

ビットマップをロードしてキャンバスに表示しようとしています。以前にこの方法を使用して実行しましたが、正常に機能しました。残念ながら、今回は問題が発生したため、問題を特定する方法がわかりません。

私のコードはここに到達します:

しかし、その後、logcatとの間で警告が表示されLoading bitmapsますBitmap Loaded。その後、アプリの力が閉じ、私はの値を見ることはありませんstageLHeight.

これがlogcatです:

そして、それが役に立つ場合には、R.java:

0 投票する
2 に答える
17424 参照

android - Android: 使用する画像形式とその理由は?

私は初心者のプログラマーです。私の質問は次のとおりです。私の Android アプリにはどの画像形式を使用すればよいですか?

説明: イラストしか使っていないので、画像は主に背景画像といくつかのボタンですが、これを行う最良の方法を知りたいです。

画像に関する現在の進捗状況は次のとおりです。私は .png ファイル形式を使用しています。どの解像度を使用すればよいかわかりません。現在、300x400 px の画像をほぼ使用しています。

画像を使用するための私のコードは次のとおりです。

Bitmap bMap = BitmapFactory.decodeResource(getResources(), MyArray[index].getArtiD());

MyImageView.setImageBitmap(bMap);

だから、これは私がAndroidで画像を使用する方法です.誰かが問題、ヒント、または「知っておく必要がある情報」を知っている場合は、plsにそれを行うように伝えてください. なぜこのビットマップ ファクトリを使用する必要があるのか​​、またはなぜ png 形式を使用する必要があるのか​​ よくわかりません。私はできる限り最善の方法でそれをやりたいと思っています.Androidのドキュメントには多くのことがありません.

ありがとう、アダム