2011-01-25 1 views
1

이상한 일이 발생합니다. 적어도 이해하지 못합니다.Android - 프로그래밍 방식으로 이미지를 축소 한 후 크기 조정

하나의 ImageButton에 표시되는 이미지 (w : 120px, h : 63px)가 있습니다. 그 이미지의 유일한 변형은 drawable-hdpi에 위치합니다 (다른 drawable 디렉토리는 없습니다). 모든 것이이 이미지와 모든 해상도 (밀도)로 괜찮습니다. 안드로이드는 매우 멋지게 처리합니다.

그러나 앨범에서 사진 (예 : 매우 큰 사진)을 찍은 다음 버튼 크기 (이전에 언급 한, w : 120px h : 63px)로 크기를 조절하고 그 작은 이미지를 ImageButton 배경.

중 밀도 (160)의 에뮬레이터에서 테스트 할 때 크기가 조정 된 이미지가 작아 보이므로 고밀도 버튼이있는 장치에서 테스트 할 때 크기가 조정됩니다.

누구나 무슨 일이 일어나고 있는지, 그리고 크기를 조정 한 후에 이미지의 크기가 다시 변경된 이유는 무엇입니까?

모든 단서는 높이 평가 될 것입니다.

public static void resizeAndSaveImage(String pathToResize, int newWidth, int newHeight, FileOutputStream output) { 
try { 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inSampleSize = 8; 
    Bitmap bitmap = BitmapFactory.decodeStream(new FileInputStream(pathToResize), null, options); 
    if (bitmap != null) { 
     int width = bitmap.getWidth(); 
     int height = bitmap.getHeight(); 
     float scaleWidth = ((float) newWidth)/width; 
     float scaleHeight = ((float) newHeight)/height; 
     Matrix matrix = new Matrix(); 
     matrix.postScale(scaleWidth, scaleHeight); 
     Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true); 
     resizedBitmap.compress(Bitmap.CompressFormat.PNG, 100, output); 
     output.close(); 
    } 
} catch (Exception e) { 
    // ... 
} 

차원 매개 변수는 다음과 같이 전달됩니다 : 여기

내가 이미지 크기를 조정에 사용하는 코드입니다 newWidth = 120, newHeight = 당신은 당신이 원하는 것을 달성하기 위해 63

+0

1.5 API를 설정, 그 크기 조정에서 안드로이드가 중단하지만, 수단, 당신은 그것을해야 할 것이다. –

답변

1

물리적 픽셀이 아닌 밀도 독립적 픽셀 (dp)을 사용해야합니다. here로부터 판독 :

밀도 독립적 화소가 160 dpi의 화면에서 하나 개의 물리 화소에 상당 이다 (이 문서의 뒷부분 바와 같은) 플랫폼에 의해 상정 된 기준 밀도 . 실행시, 이 플랫폼은 투명 사용 화면의 실제 밀도 를 기반으로 필요한 DP 단위의 스케일링을 처리합니다. 화면 DP 화소 단위 변환은 간단 화소 = DPS * (밀도/160). 예를 들어, 240 dpi 화면에서 1 dp는 1.5 실제 픽셀과 같습니다. 에 DP 단위를 사용하여 다른 화면에 UI의 적절한 표시를 보장하는 방법으로, 응용 프로그램의 UI는 매우 권장 정의합니다. 이 이미지 리소스와 하나 개의 이미지 (앨범 사진)이 아니라 함께 일어나는 이유를보다 자세히 설명하기 위해

, 당신은 당신이 스케일링에 사용하는 코드를 게시해야합니다.

+0

크기 조정에 사용하는 코드 스 니펫을 추가했습니다. 도움이 될 수 있기를 바랍니다. – ezamur