399 Stimmen

Wie ändert man die Größe einer Bitmap in Android?

Ich habe eine Bitmap von einem Base64-String aus meiner Remote-Datenbank genommen, ( encodedImage ist die Zeichenkette, die das Bild mit Base64 darstellt):

profileImage = (ImageView)findViewById(R.id.profileImage);

byte[] imageAsBytes=null;
try {
    imageAsBytes = Base64.decode(encodedImage.getBytes());
} catch (IOException e) {e.printStackTrace();}

profileImage.setImageBitmap(
    BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)
);

profileImage ist mein ImageView

Ok, aber ich muss die Größe dieses Bildes ändern, bevor ich es auf meiner ImageView meines Layouts. Ich muss die Größe auf 120x120 ändern.

Kann mir jemand den Code für die Größenänderung nennen?

Die Beispiele, die ich gefunden habe, konnten nicht auf eine Bitmap mit Base64-String angewendet werden.

0 Stimmen

Mögliches Duplikat von Größe der Bitmap in Android ändern

0 Stimmen

@SagarPilkhwal diese Frage wurde zuerst gestellt

625voto

user432209 Punkte 19627

Ändern:

profileImage.setImageBitmap(
    BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)

An:

Bitmap b = BitmapFactory.decodeByteArray(imageAsBytes, 0, imageAsBytes.length)
profileImage.setImageBitmap(Bitmap.createScaledBitmap(b, 120, 120, false));

0 Stimmen

Nehmen wir an, Sie haben ein Bild mit einer großen Auflösung, z.B. 1200x1200, und wenn Sie dieses anzeigen, wird es in der Bildansicht voll angezeigt. Wenn ich es verkleinere, z.B. um 75 %, und der Bildschirm so beschaffen ist, dass er das skalierte Bild auch vollständig in der Bildansicht anzeigt, was sollte dann für solche Bildschirme getan werden?

5 Stimmen

Die createScaledBitmap werfen eine Out of Memory Exception auf meinem Galaxy Tab2, die sehr seltsam zu mir ist, da es eine Menge Speicher und keine andere bestimmte App ausgeführt werden. Die Matrix-Lösung funktionieren aber.

0 Stimmen

Die passendste Antwort, die ich gefunden habe.

135voto

ZenBalance Punkte 9707

Wenn Sie bereits eine Bitmap haben, können Sie den folgenden Code zur Größenänderung verwenden:

Bitmap originalBitmap = <original initialization>;
Bitmap resizedBitmap = Bitmap.createScaledBitmap(
    originalBitmap, newWidth, newHeight, false);

1 Stimmen

@beginner Wenn Sie die Größe des Bildes ändern, kann es sein, dass Sie die Skalierung auf der Grundlage verschiedener Dimensionen vornehmen, die entweder die Bitmap in falsche Proportionen verwandeln oder einige der Bitmap-Informationen entfernen.

0 Stimmen

Ich habe versucht, die Größe der Bitmap auf der Grundlage der Proportionen zu ändern, aber dann habe ich diesen Fehler erhalten. Verursacht durch: java.lang.RuntimeException: Canvas: Versuch, eine recycelte Bitmap zu verwenden Android.graphics.Bitmap@2291dd13

0 Stimmen

@beginner jedes Mal, wenn Sie die Größe der Bitmap ändern, je nachdem, was Sie tun, müssen Sie in der Regel eine Kopie erstellen, die eine neue Größe hat, anstatt die Größe der bestehenden Bitmap zu ändern (da es in diesem Fall so aussieht, als ob der Verweis auf die Bitmap bereits im Speicher recycelt wurde).

49voto

Renato Probst Punkte 5557

Skala basiert auf Seitenverhältnis :

float aspectRatio = yourSelectedImage.getWidth() / 
    (float) yourSelectedImage.getHeight();
int width = 480;
int height = Math.round(width / aspectRatio);

yourSelectedImage = Bitmap.createScaledBitmap(
    yourSelectedImage, width, height, false);

Um die Höhe anstelle der Breite als Basis zu verwenden, ändern Sie in:

int height = 480;
int width = Math.round(height * aspectRatio);

27voto

Kevin Punkte 1749

Skalieren einer Bitmap mit einer maximalen Zielgröße und -breite, wobei das Seitenverhältnis beibehalten wird:

int maxHeight = 2000;
int maxWidth = 2000;    
float scale = Math.min(((float)maxHeight / bitmap.getWidth()), ((float)maxWidth / bitmap.getHeight()));

Matrix matrix = new Matrix();
matrix.postScale(scale, scale);

bitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);

7voto

Taochok Punkte 349

Jemand fragte, wie man in dieser Situation das Seitenverhältnis beibehält:

Berechnen Sie den Faktor, den Sie für die Skalierung verwenden, und verwenden Sie ihn für beide Dimensionen. Angenommen, Sie möchten, dass ein Bild 20 % des Bildschirms in der Höhe einnimmt

int scaleToUse = 20; // this will be our percentage
Bitmap bmp = BitmapFactory.decodeResource(
    context.getResources(), R.drawable.mypng);
int sizeY = screenResolution.y * scaleToUse / 100;
int sizeX = bmp.getWidth() * sizeY / bmp.getHeight();
Bitmap scaled = Bitmap.createScaledBitmap(bmp, sizeX, sizeY, false);

um die Bildschirmauflösung zu erhalten, haben Sie diese Lösung: Bildschirmabmessungen in Pixel abrufen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X