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.

War es hilfreich?

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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top