2012-01-21 13 views
0

AndroidがビットマップをImageViewに読み込む方法で、私は全く変わった動作に遭遇しました。たとえば、urimg_01.jpgと呼ばれる500x313の画像ファイルがあります。このコードでは:奇妙なImageViewビットマップの処理

 img.setImageResource(R.drawable.urimg_01); 
     Bitmap bitmap = ((BitmapDrawable) img.getDrawable()).getBitmap(); 
     Log.v(TAG,"---------------------> bitmap width = "+bitmap.getWidth()); 
     Log.v(TAG,"---------------------> bitmap height = "+bitmap.getHeight()); 

ImageViewビットマップは750x470です。 (私は480X800ディスプレイとネクサスSを持っている。)

getFilesDir(にある同じファイルのコピーを読み込み、このコードは、)で:予想通り

  Log.v(TAG,"image file is "+filelist[0].getAbsolutePath()); 
      FileInputStream fis = new FileInputStream(filelist[0]); 
      FileDescriptor fd = fis.getFD(); 
      Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fd); 
      if (bitmap != null) { 
       Log.v(TAG,"---------------------> bitmap width = "+bitmap.getWidth()); 
       Log.v(TAG,"---------------------> bitmap height = "+bitmap.getHeight()); 
       img.setImageBitmap(bitmap); 
       fis.close(); 
      } 

ImageViewのビットマップは、500x313です。

setImageResource()の場合、悪魔は750x470をどこから得るのですか?そして、それをdrawableのリソースの正しい次元で使う方法を教えてください。

答えて

0

あなたのリソースは、中密度のフォルダに格納されている可能性があり、高密度デバイスを使用している可能性があるため、スケールアップされています。詳細は、Bitmap getWidth returns wrong valueを参照してください。ここ

0

はあなたのビットマップを取得今

Bitmap bitmap = BitmapFactory.decodeFileDescriptor(fd); 

デバイスの高さと

 Display display=this.getWindowManager().getDefaultDisplay(); 
    int w=display.getWidth(); 
    int h=display.getHeight(); 
    Bitmap newBitmap=Bitmap.createScaledBitmap(oldBitmap, w, h, false); 
    //now setImage to background with new Bitmap 

一つ重要なこと「これは」あるべき活動コンテキスト :)歓声

幅に合わせて拡大縮小
関連する問題