2009-12-29 4 views
3

WVGA854 스킨 및 240lcd 밀도 (Motorola Droid) 인 Android 2.0.1의 SD 카드에 저장된 480x320 JPEG 파일을 표시하려고합니다. 그러나Android 2.0.1에서 예기치 않은 크기의 비트 맵 드로이드 WVGA854

, I는 Drawable.createFromPath()를 통해 BitmapDrawable를 생성 할 때, 생성 BitmapDrawable 다음 값 가지고

mBitmapWidth = 320

mBitmapHeight = 213

mTargetDensity = 160

매니페스트는 다음 구성을 포함합니다.

<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4" /> 
<supports-screens 
    android:largeScreens="true" 
    android:normalScreens="true" 
    android:smallScreens="true" 
anyDensity="true" 
/> 

분명히 안드로이드가 비트 맵의 ​​크기를 조정하고 있습니다. 이 문제의 원인은 무엇일까요? 어떻게 피할 수 있습니까?

미리 감사드립니다.

+0

인터넷 검색을 통해 안드로이드의 후자 버전에서 BitmapFactory가 화면 밀도에 따라 비트 맵을 조정한다는 것을 알았습니다. Drawable.createFromPath()는 구현시 BitmapFactory를 사용하는 편리한 메서드입니다. 이 스케일링을 끄려면 BitmapFactory 옵션이있는 것 같지만 (inScaled = false) API 레벨은 4입니다. 해결책은 더 낮은 API 레벨에서 리플렉션이 작동해야 할 수도 있습니다. 이 문제가 해결되면 더 많은 실험을하고 답변을 게시 할 것입니다. – hpique

답변

5

Drawable.createFromPath()는 구현시 BitmapFactory를 사용하는 편리한 방법입니다. API 레벨 4 Android가 자동으로 모든 비트 맵 드로어 블 및 기타 리소스를 재조정 한 것으로 보입니다.

비트 맵의 ​​원래 크기를 얻으려면 드로어 블을 비트 맵 드로잉으로 캐스팅하고 BitmapDrawable.geBitmap(). getWidth() 및 BitmapDrawable.geBitmap(). getWidth()를 사용해야합니다.

BitmapFactory를 직접 사용하고 BitmapFactory.Options.inScaled를 사용하여 재배치를 해제 할 수 있습니다. 이 속성은 API 수준 4 이후에만 사용할 수 있으므로 API 수준 3 장치를 대상으로하려면 리플렉션을 사용하여 해당 존재를 확인해야 할 수 있습니다.

SD 카드 이미지에 이러한 재배치가 필요한 이유와 이것이 프로그래머에게 어떤 이점이 있는지에 대해서는 아직도 이해할 수 없습니다. 예, 160 밀도의 320x213 영역은 240 밀도에서 약 480x320 영역이되지만 Drawable.createFromPath()가 240 밀도로 240 밀도의 응용 프로그램을 240 밀도로 실행하는 응용 프로그램으로 반환 한 경우 더 적합하지 않습니까?

관련 문제