問題タブ [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 投票する
1 に答える
2241 参照

java - Android の BitmapFactory.Options に関する質問

ビットマップをデコードするパフォーマンスの問題について読んでいて、OutOfMemoryError「ビットマップが VM の予算を超えています」という問題を受け取りましたが、メモリ不足ではないと予想し、これがフレームワークのバグと呼ばれる一般的な問題であることをオンラインで読みました。多くの開発者。

通常、2 回目のパスで上記のエラーが発生します。かなり大きなビットマップを正常にロードし、それをリサイクルして、ref を null に設定したとしましょう。ビットマップをメモリにロードする作業を行うこの同じメソッドを 2 度目に呼び出すと、クラッシュします。

BitmapFactory.Options を使用して実行できることがいくつかある (たとえば、入力バッファーを明示的に提供する) ことを、ここおよび他のオンラインの以前の投稿で読みました。しかし、私が見つけたものをやみくもに使用する前に、これらのクラスについてより多くの知識を持っている人がもう少し光を当てることができることを願っています.

  1. バイト配列を BitmapFactory.Options.inTempStorage に明示的に提供することと、エンコード プロセス中に BitmapFactory がバイト配列なしで行うことの違いは何ですか? これが OutOfMemoryError に役立つのはなぜですか? デフォルトよりも小さいバッファを提供しているため、メモリが不足する前にクリーンアップする機会が増えていますか?

  2. Bitmap.recycle() を呼び出すと具体的に何が起こっているのでしょうか? Bitmap を null に設定するのとなぜ違うのでしょうか? 注: どちらかまたは両方を実行しても、OutOfMemory エラーが発生するかどうか (およびいつ発生するか) に違いはありません。

  3. この種の問題で GC を明示的に招待する必要がある場合はありますか? 私は常に (Java と .Net の両方で) GC が、メモリを解放するだけでなく、コレクションに対してより多くの影響があるため、GC がどこでいつ実行するかを決定することを信頼する必要があるという仮定の下で操作してきました。 (そして、私は個人的にその決定を下すのに十分なほど精通していません)。

アップデート:

このビデオは、私の質問のほとんどに答えました。

Google I/O 2011: Android アプリのメモリ管理

http://www.youtube.com/watch?v=_CruQY55HOk

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

android - BitmapFactory.decodeStreamは例外なくnullを返します

サーバーからリモートイメージをロードしようとしていますが、stackoverflowの多くのコード例のおかげで、3つのイメージのうち2つで機能するソリューションがあります。3番目の画像の問題が何であるかはよくわかりません。デバッガーでコードを実行すると、画像が読み込まれることがあります。また、問題のある画像を最初にロードすると、他の2つの画像がロードされないことがあります。

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

デバッグ中に、o.outWidthが-1であり、エラーを示していることがわかりましたが、例外はスローされないため、何が問題だったのか実際にはわかりません。InputStreamは常に有効な値を返しました、そして私は絵がサーバーに存在することを知っています。

よろしくお願いします、ダニエル

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

android - Androidで写真を撮った後にサムネイルを保存する

下部の完全なコードを介して写真を撮ることができるアプリが動作しています。私の質問は、jpeg に保存されているサムネイルにアクセスする方法、または新しいサムネイルを生成する方法に関するものです。このクラスにコードを配置するか、イベントまたはスケジュールに基づいてフォルダーをチェックしてサムネイルを生成する別のクラスを配置しても問題ありません。

具体的には、サムネイルがあるように設定しましたが、とにかくアクセスできません。ExifInterface の実装を試み、写真のサイズを手動で変更しようとしました。他のパラメーターを Jpeg Exif に入れることができました (緯度と経度に乱数を入れます)。ファイルを確認したところ、数字が書かれていることが確認できました。どうもありがとう。

これは、Exif インターフェイスを使用して試行し、失敗したものです。

クラスの完全なコード。

}

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

android - BitmapFactory.decodeResource(context、int)はコンテキスト文字列を取得できますか

文字列(たとえばvar sprite)を返すメソッドがあり、この文字列はビットマップimgの名前であり、BitmapFactory.decodeResource()で使用したいのですが、これを組み合わせる方法がわかりません。 intR.drawable.spriteである必要があります

これはできますか?

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

java - BitmapFactory.decodeFileがnullを返すのはなぜですか?

私はAndroidのFaceDetectorを試しています。androidエミュレーターでandroidカメラを使用する方法が見つからないため、ビットマップファイル(faces.bmpは集合写真からのもの)を使用する必要があります。ただし、BitmapFactory.decodeFileはnullを返し、ドキュメントには、ビットマップをデコードできなかった場合にのみnullを返すと記載されています。これは、24ビットの.bmpファイルです。Windows 7でEclipseを使用しています。pathNameを間違って指定しましたか?24ビットの.bmpファイル以外のものを使用する必要がありますか?

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

android - 速度のための BitmapFactory.Options.inSampleSize の最適な使用

anddev.orgこの質問をしてくれたSchermvliegerに感謝します。

他のサイトで誰も答えなかったので、私は彼の質問をSOにコピーしているだけで、私も同じ問題に直面しています。

BitmapFactory.Options.inSampleSize画像の表示速度に関して、最適な使用法は何だろうと思っていました。
ドキュメントには、2 の累乗の値を使用することが記載されているため、2、4、8、16 などを使用しています。

私が疑問に思っていることは次のとおりです。

  1. 画面の解像度よりもまだ大きい最小サイズにリサンプリングする必要がありますか、それとも、エラーを回避するのに十分なサイズにサンプリングする必要がありOutOfMemoryErrorますか?
  2. メモリを使い果たすことなく表示できる画像の最大サイズを計算するにはどうすればよいでしょうか? 画像の色深度やディスプレイの深度も影響しますか?
  3. 2つのメカニズム(BitmapFactory大きなファイルsetImageURI()用、小さなファイル用)を介して画像を表示するのは効率的ですか?ImageSwitcherちなみに使用しています。
  4. とをアプリケーションの最初に作成したり、必要なときにその場でのみ作成したりするのBitmapに役立ちますか?BitmapFactory.OptionsinTempStorage
0 投票する
1 に答える
2865 参照

android - Android: BitmapFactory.decodeStream OutOfMemoryException - SoftReference は解決策ですか?

私は OutOfMemoryException を取得しています:

次の関数では:

FlushedInputStream (ただし、このコードを追加する前にエラーが発生しました):

基本的に、画像をダウンロードしてフレームレイアウトに配置し、フレームをフェードインおよびフェードアウトしてスライドショーを表示するアクティビティがあります。フレームレイアウトには 2 つのイメージビューの子があります。

OOMExceptions を防ぐために SoftReference が使用されていると人々が話しているのを見たことがありますが、これをコードに適用して (できれば) このエラーを防ぐ方法を理解できません。

これがどのように達成されるかを誰かが説明できますか?

0 投票する
6 に答える
34701 参照

android - gridview を使用して SDCard 上の特定のフォルダーから画像を表示する

SDCard にある特定のフォルダから画像をロードするグリッドビューを作成しようとしています。フォルダーへのパスはわかっています ("/sdcard/pictures") ですが、オンラインで見た例では、画像をロードする写真フォルダーへのパスを指定する方法や場所がわかりません。developer.android.com の HelloGridView チュートリアルでさえ、何十ものチュートリアルを読みましたが、それらのチュートリアルは私が求めているものを教えてくれません。

これまでに読んだすべてのチュートリアルには、次のいずれかがあります。

A) 画像を /res フォルダから Drawable として呼び出し、SDCard をまったく使用せずに、ロードする配列に配置します。

B) MediaStore を使用して SDCard 上のすべての画像にアクセスしましたが、画像フォームを表示したいフォルダーへのパスを設定する方法を指定していません

また

C) BitmapFactory を使用することをお勧めしますが、使用方法がまったくわかりません。

これについて間違った方法で行っている場合は、私に知らせて、私がやろうとしていることを行うための適切な方法に向けてください.

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

android - Android OOM for Bitmap with image Capture

私は過去 3 日間ノンストップでこの「メモリ リーク」と戦ってきました。アプリケーションの他の部分を合理化しましたが、この問題は残っていました。

まず私がやろうとしていること。イメージをファイルに保存するために、 EXTRA_OUTPUT を使用して IMAGE_CAPTURE のインテントを起動しています。次に、返された画像を 2 倍に縮小して表示し、ユーザーに画像の正方形の部分を選択させます。それを選択すると、別のアクティビティに移動し、画像にテキストなどのタグを付けて、最終的に HTTPPost を使用してすべてをサーバーにアップロードします。

今のところ、すべてが一度だけうまく機能します! 私はそれを通過でき、問題なくすべてが機能します。ただし、別の写真を撮ろうとすると、常にメモリ不足の例外が発生します。最新の発生時刻の Logcat は次のとおりです。

最後のアクティビティの setContentView で失敗しています。これは、ユーザーに画像を 1 回表示するが、どういうわけか再度表示できないためです。

私は本当に助けていただければ幸いです!

更新 この問題を複数の電話でテストしてきましたが、これを行っているように見えるのは Froyo を搭載した Nexus One だけです。Samsung Captivate 2.1 で動作し、Moto Milestone 2.1 ではこの問題に関してクラッシュしません。

また、最後に 500 x 500 の画像が必要なので、2 倍以上に縮小することはできません。

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

android - デスクトップ アプリケーションで Android SDK クラスを使用できますか?

android.graphics.Bitmapデスクトップ アプリケーションで操作したいファイルに保存したデータがあります。データはサードパーティのアプリケーションによって生成されるため、アプリを変更してデータを png または jpeg として保存することはできません。

android.graphics.Bitmap および android.graphics.BitmapFactory クラスを使用できるように、android SDK jar を Java デスクトップ プロジェクトにインポートできるかどうか疑問に思っています。SDK から android.jar を追加しようとしましたが、BitmapFactory.decodeByteArray()メソッドを呼び出そうとすると、ランタイム例外 (「スタブ!」) が発生します。

助けてください。

SDK jar をインポートできない場合、アンドロイドが使用するビットマップの形式を知っている人はいますか?