Eine Bitmap dynamisch auf die Displaygröße skalieren

  • 3 Antworten
  • Neuester Beitrag
Diskutiere Eine Bitmap dynamisch auf die Displaygröße skalieren im Android App Entwicklung im Bereich Betriebssysteme & Apps.
A

atracorvus

Neues Mitglied
Hallo zusammen,

ich habe eine Bitmap, welche als Hintergrund für meine Canvas dient.
Allerdings ist diese Bitmap zu groß, so dass sie quasi "aus dem Display heraus hängt".
Da die App ja auf verschiedenen Handys mit unterschielicher Displaygröße laufen soll, möchte ich diese Bitmap an die jeweilige Displaygröße anpassen lassen, anstatt mit einer festen Größe zu arbeiten.
Wie lässt sich das am besten anstellen?

Danke schonmal ;)
 
keinbrain

keinbrain

Erfahrenes Mitglied
Einfache Mathematik und Matrix ist die Lösung ;)
Ich sende dir einfach mal den Code, den wir in einer unserer Apps zum skalieren benutzen.

Code:
DisplayMetrics metrics = this.getResources().getDisplayMetrics();
                int width = metrics.widthPixels;
                
                int maxBreite = 400;
                int bildbreite = 0;
                
                if(width < maxBreite){
                    
                    bildbreite = width;
                }
                else{
                    
                    bildbreite = maxBreite;
                }
                
                int breite_alt = img.getWidth();
                int hoehe_alt = img.getHeight();
                
                double skalierung = ((double)hoehe_alt) / ((double)breite_alt);
                
                int bildhoehe = (int) (bildbreite * skalierung);
                
                float scaleWidth = ((float) bildbreite) / breite_alt;
                 
                float scaleHeight = ((float) bildhoehe) / hoehe_alt;
                
                Matrix matrix = new Matrix();
                matrix.postScale(scaleWidth, scaleHeight);
                
                Log.d("bildhoehe/breite", String.valueOf(bildhoehe) + "|" + String.valueOf(bildbreite));
                
                Bitmap resizedImage = Bitmap.createBitmap(img, 0, 0, breite_alt, hoehe_alt, matrix, false);
So werden die Bilder nach links und rechts, also width, immer bis zum Rand skaliert, es sei denn, maxBreite wird überschritten. Das Width/Height - Verhältnis bleibt beim skalieren erhalten.

Ich hoffe das hilft dir,
Mfg
 
A

atracorvus

Neues Mitglied
Danke, das ist super.
Was müsste ich denn ändern, damit das Verhältnis zwischen Width und Height absichtlich nicht erhalten bleibt, so dass ein gestrecktes Bild herauskommt?
 
keinbrain

keinbrain

Erfahrenes Mitglied
Naja height erhöhen ;)
Du kannst einfach Werte in
Code:
matrix.postScale(scaleWidth, scaleHeight);
einsetzen, also wenn scaleHeight größer ist als scaleWidth, ist dein Bild gestreckt (wenn es quadratisch war).

Darf man fragen was du mit falsch hochskalierten Bildern machen möchtest? :D
 
Ähnliche Themen - Eine Bitmap dynamisch auf die Displaygröße skalieren Antworten Datum
3
Ähnliche Themen
App Name dynamisch ändern