2014-06-24 4 views
5

Ich lade ein Bild mit Universal Image Loader, und ich möchte es skalieren, so dass die Breite die Breite des Bildschirms ist und die Höhe entsprechend skaliert wird, was bedeutet, dass zuvor Ich lade das Bild, ich kenne die Breite, die ich will, aber nicht die Höhe. Also, wenn ich das Bild lade, möchte ich die Höhe und Breite des Bildes erhalten und dieses verwenden, um es entsprechend der Breite des Bildschirms zu skalieren. Der Code, den ich, dies zu tun, ist dies:Größe der Bitmap nach dem Laden mit Universal Image Loader

try { 
    display.getSize(size); 
    scaledWidth = size.x; 
} catch (java.lang.NoSuchMethodError ignore) { 
    scaledWidth = display.getWidth(); 
} 

String filePath = "file://" + getBaseContext().getFilesDir().getPath().toString() + "/" + imagePath + ".png"; 
Bitmap bitmap = imageLoader.loadImageSync(filePath); 
int height = bitmap.getHeight(); 
int width = bitmap.getWidth(); 
scaledHeight = (int) (((scaledWidth * 1.0)/width) * height); 
//Code to resize Bitmap using scaledWidth and scaledHeight 

Was ist der beste Weg, um die Bitmap mit Universal Bild Loader, oder noch besser, um die Größe, gibt es eine Möglichkeit, dass ich nur die Breite und die Bitmap angeben wird skaliert richtig basierend auf seinen Proportionen?

+0

brauchen http://stackoverflow.com/questions/4837715/how-to-resize -a-bitmap-in-android – kupsef

+0

Ich würde vorschlagen, dass Sie die [Picasso Bibliothek] (http://square.github.io/picasso/) verwenden. Es ermöglicht ein sehr einfaches Laden und Manipulieren von Bildern und ist dabei trotzdem flexibel. –

+0

Meine Lösung basiert auf @ nitesh-goel-Code und @zhaoyuanjie 'DisplayImageOptions', aber mit 'ImageScaleType.EXACTLY_STRETCHED'. Beachten Sie, dass das Bild verschwommen aussieht, wenn Sie es zu stark vergrößern. – Leukipp

Antwort

1

Verwendung kann

// Load image, decode it to Bitmap and return Bitmap to callback 
ImageSize targetSize = new ImageSize(120, 80); // result Bitmap will be fit to this size 
imageLoader.loadImage(imageUri, targetSize, displayOptions, new SimpleImageLoadingListener() { 
    @Override 
    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
     // Do whatever you want with Bitmap 
    } 
}); 
0

verwenden Ich habe nicht den Code lesen, aber die Berechnungen zur Bestimmung der Höhe sind recht einfach. Was wir wollen, ist das Seitenverhältnis des Bildes intakt zu halten. So berechnet zuerst die aspect_ratio d.h

imageHeight/imageWidth = aspt_ratio; 

dann diese aspect_ratio nehmen und es mit der aktuellen Bildschirmbreite multiplizieren, um die Höhe zu bekommen.

da wir wissen, dass die skalierte Breite des Bildes immer gleich der Bildschirmbreite sein wird, entsprechend Ihrer Anforderung.

0

mit Das funktioniert, wie Sie

scaledWidth = size.x; 

String filePath = "file://" + getBaseContext().getFilesDir().getPath().toString() + "/" + imagePath + ".png"; 

    android.graphics.BitmapFactory.Options options= new Options(); 
     options.inJustDecodeBounds=true; 
//Just gets image size without allocating memory 
BitmapFactory.decodeFile(filePath, options); 


int height = options.outHeight; 
int width = bitmap.outWidth; 
scaledHeight = (int) (((scaledWidth * 1.0)/width) * height); 


ImageSize targetSize = new ImageSize(scaledWidth, scaledHeight); 
Bitmap bmp = imageLoader.loadImageSync(imageUri, targetSize, displayOptions);