アプリに機能を追加するためのガイドラインとして、このチュートリアルを使用しています。
http://developer.android.com/training/camera/photobasics.html
チュートリアルに付属の例は不完全で、いくつかの「間違い」があります。主なチュートリアルの目的がカバーされているため、単語の間違いを引用符で囲みます: カメラの操作.
撮影した大きなものからサムネイル写真を取得することに重点を置いています。この例を実行すると、指定されたディレクトリに正しく保存されているにもかかわらず、ほとんどの場合、大きな写真のサムネイルが表示されないことがすぐにわかります。
ちょっとした作業を行って、次の「間違い」を発見しました。
1.- メモリ不足によりアクティビティが破棄されるため、イメージのパス値が頻繁に失われます。メソッド onSaveInstanceState() に写真へのパスを保存することを修正しました。
このようにして、常に画像にアクセスできましたが、まだ表示されませんでした。私はいくつかのテストを続け、次のことを発見しました。
2.-ほとんどの場合、画像を再スケーリングするために画像ビューの測定値 (幅と高さ) を要求すると、値は 0 でした。描かれた。そこで、ハンドラーを使用して修正し、遅延メッセージ (1.5 インチ) を送信して実行しました。これで、メジャーは常に正しく取得されますが、ほとんどの場合、サムネイルは表示されません。
したがって、すべての変数が正しく設定されているにもかかわらず、 Bitmap.decodeFile メソッドが null 値を返していると思いました。しかしそうではなく、ビットマップを返しています。皆さん、サムネイルが表示されない理由がわかりません。
少し助けていただければ幸いです。ありがとう!
これは、画像を再スケーリングする方法です。
//Scaling the real size photo to the image view size
private void setImagenPequena()
{
Log.w("PAth: ", n_path_foto_actual);
// Get the dimensions of the View
int targetW = n_iv_foto.getMeasuredWidth();
int targetH = n_iv_foto.getMeasuredHeight();
// Get the dimensions of the bitmap
BitmapFactory.Options bmOptions = new BitmapFactory.Options();
bmOptions.inJustDecodeBounds = true;
BitmapFactory.decodeFile(n_path_foto_actual, bmOptions);
int photoW = bmOptions.outWidth;
int photoH = bmOptions.outHeight;
Log.w("setImagenPequena: ", "photoW: " + Integer.toString(photoW));
Log.w("setImagenPequena: ", "photoH: " + Integer.toString(photoH));
Log.w("setImagenPequena: ", "targetW: " + Integer.toString(targetW));
Log.w("setImagenPequena: ", "targetH: " + Integer.toString(targetW));
if(targetW > 0 && targetH > 0)
{
// Determine how much to scale down the image
int scaleFactor = Math.min(photoW/targetW, photoH/targetH);
bmOptions.inSampleSize = scaleFactor;
}
// Decode the image file into a Bitmap sized to fill the View
bmOptions.inJustDecodeBounds = false;
bmOptions.inPurgeable = true;
Bitmap bitmap = BitmapFactory.decodeFile(n_path_foto_actual, bmOptions);
if(bitmap == null)
Log.w("valor bitmap: ", "null");
else
Log.w("valor bitmap: ", "!=null");
n_iv_foto.setImageBitmap(bitmap);
}