Eine Bitmap dynamisch auf die Displaygröße skalieren

A

atracorvus

Neues Mitglied
0
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 ;)
 
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
 
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?
 
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

M
  • MikelKatzengreis
Antworten
5
Aufrufe
114
swa00
swa00
R
Antworten
4
Aufrufe
726
Rapidoman
R
Zurück
Oben Unten