2012-01-21 3 views
0

안드로이드가 비트 맵을 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입니다. (I은 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(); 
      } 

이미지 뷰 비트 맵은 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 

하나 개 중요한 것은 "이"합니다 활동 상황 :) 환호

폭에 따라 확장
관련 문제