BitmapDrawable mit unerwarteten Größe in Android 2.0.1 WVGA854
Frage
Ich mag eine 480x320 JPEG-Datei auf der SD-Karte in Android 2.0.1 mit WVGA854 Haut und 240 lcd Dichte (Motorola Droid) gespeichert anzuzeigen.
Allerdings, wenn ich einen BitmapDrawable durch Drawable.createFromPath () erstellen, hat die resultierende BitmapDrawable folgende Werte:
mBitmapWidth = 320
mBitmapHeight = 213
mTargetDensity = 160
Das Manifest enthält die folgende Konfiguration:
<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4" />
<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
anyDensity="true"
/>
Anscheinend Android ist Ändern der Größe der Bitmap. Was könnte die Ursache für dieses Verhalten sein? Wie kann ich es vermeiden?
Vielen Dank im Voraus.
Lösung
Drawable.createFromPath () ist eine bequeme Methode, BitmapFactory in seiner Implementierung verwendet. Es scheint, dass seit dem API-Level 4 Android automatisch neu skaliert all Bitmap Drawables und andere Ressourcen.
Um die ursprüngliche Größe des Bitmap einen bekommen muß die ziehbar in eine Bitmap ziehbar werfen und verwenden BitmapDrawable.geBitmap (). GetWidth () und BitmapDrawable.geBitmap (). GetWidth ().
Eine Alternative kann BitmapFactory sein, direkt zu verwenden, und schalten Sie das mit dem BitmapFactory.Options.inScaled rescaling ab. Diese Eigenschaft ist nur verfügbar, da API-Ebene 4, also wenn Sie API-Level-3-Geräte zu Ziel wollen, möchten Sie vielleicht Reflexion verwenden, um seine Anwesenheit zu überprüfen.
Ich verstehe immer noch nicht, warum solche Umskalierungs für SD-Karte Bilder und wie diese Vorteile Programmierer in irgendeiner Weise erforderlich ist. Ja, ein 320x213-Bereich in 160 Dichte wird (ungefähr) ein 480x320-Bereich in 240 Dichte, aber würde es nicht mehr Sinn machen, wenn Drawable.createFromPath () läuft in 240 Dichte einen 480x320 ziehbar mit 240 Dichte an eine Anwendung zurückgegeben?