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

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

5voto

Asad Ali Choudhry Punkte 4419

Obwohl die akzeptierte Antwort richtig ist, wird die Größe nicht angepasst Bitmap durch Beibehaltung der gleichen Bildseitenverhältnis . Wenn Sie nach einer Methode zur Größenänderung suchen Bitmap unter Beibehaltung des gleichen Seitenverhältnisses können Sie die folgende Hilfsfunktion verwenden. Die Details zur Verwendung und die Erklärung der Funktion finden Sie unter dieser Link .

public static Bitmap resizeBitmap(Bitmap source, int maxLength) {
       try {
           if (source.getHeight() >= source.getWidth()) {
               int targetHeight = maxLength;
               if (source.getHeight() <= targetHeight) { // if image already smaller than the required height
                   return source;
               }

               double aspectRatio = (double) source.getWidth() / (double) source.getHeight();
               int targetWidth = (int) (targetHeight * aspectRatio);

               Bitmap result = Bitmap.createScaledBitmap(source, targetWidth, targetHeight, false);
               if (result != source) {
               }
               return result;
           } else {
               int targetWidth = maxLength;

               if (source.getWidth() <= targetWidth) { // if image already smaller than the required height
                   return source;
               }

               double aspectRatio = ((double) source.getHeight()) / ((double) source.getWidth());
               int targetHeight = (int) (targetWidth * aspectRatio);

               Bitmap result = Bitmap.createScaledBitmap(source, targetWidth, targetHeight, false);
               if (result != source) {
               }
               return result;

           }
       }
       catch (Exception e)
       {
           return source;
       }
   }

4voto

fazal ur Rehman Punkte 95
      Try this kotlin code for resize....Where Max size any size you 
      want

      fun getResizedBitmap(image: Bitmap?, maxSize: Int): Bitmap {
    var width = image!!.width
    var height = image.height
    val bitmapRatio = width.toFloat() / height.toFloat()
     if (bitmapRatio > 0) {
        width = maxSize
        height = (width / bitmapRatio).toInt()
     } else {
        height = maxSize
         width = (height * bitmapRatio).toInt()
     }
         return Bitmap.createScaledBitmap(image, width, height, true)
     }

4voto

kakopappa Punkte 4925
public static Bitmap resizeBitmapByScale(
            Bitmap bitmap, float scale, boolean recycle) {
        int width = Math.round(bitmap.getWidth() * scale);
        int height = Math.round(bitmap.getHeight() * scale);
        if (width == bitmap.getWidth()
                && height == bitmap.getHeight()) return bitmap;
        Bitmap target = Bitmap.createBitmap(width, height, getConfig(bitmap));
        Canvas canvas = new Canvas(target);
        canvas.scale(scale, scale);
        Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG | Paint.DITHER_FLAG);
        canvas.drawBitmap(bitmap, 0, 0, paint);
        if (recycle) bitmap.recycle();
        return target;
    }
    private static Bitmap.Config getConfig(Bitmap bitmap) {
        Bitmap.Config config = bitmap.getConfig();
        if (config == null) {
            config = Bitmap.Config.ARGB_8888;
        }
        return config;
    }

4voto

Sandeep P Punkte 4112
  public Bitmap scaleBitmap(Bitmap mBitmap) {
        int ScaleSize = 250;//max Height or width to Scale
        int width = mBitmap.getWidth();
        int height = mBitmap.getHeight();
        float excessSizeRatio = width > height ? width / ScaleSize : height / ScaleSize;
         Bitmap bitmap = Bitmap.createBitmap(
                mBitmap, 0, 0,(int) (width/excessSizeRatio),(int) (height/excessSizeRatio));
        //mBitmap.recycle(); if you are not using mBitmap Obj
        return bitmap;
    }

0 Stimmen

Bei mir funktionierte es nach ein wenig Umtippen float excessSizeRatio = width > height ? (float)( (float)width / (float)ScaleSize) : (float)((float)height / (float)ScaleSize);

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