Ein Bild proportional skalieren
5.12.11, 17:23
Mit einer Matrix lässt sich ein Bild sehr einfach proportional skalieren. Die folgende Funktion skaliert ein BitmapData – Object proportional und hält die eingegebenen Maximalgrößen ein.
// image ist ein verknüpftes Bild in der Bibliothek
var c:BitmapData = new image(0,0);
// skalieren und anzeigen
var b:Bitmap = new Bitmap(getScaledBitmapData(c, 100, 100));
// Glättung des Bildes, fall man noch mehr machen möchte (rotieren etc)
b.smoothing = true;
addChild(b);
/**
* Skaliert ein BitmapData-Object proportional
* @param scale Das BitmapData-Object
* @param maxWidth maximale Breite
* @param maxHeight maximale Höhe
*
* @return ein neues skaliertes BitmapData-Object
*/
function getScaledBitmapData(scale:BitmapData, maxWidth:Number, maxHeight:Number):BitmapData
{
// Skalierungsfactor berechnen
var wt:Number = maxWidth / scale.width;
var ht:Number = maxHeight / scale.height;
// kleinsten Wert bestimmen, damit maxWidth oder maxHeight nicht überschritten wird
var factor:Number = Math.min(ht, wt);
// Matrix mit Skalierungsfaktor erstellen und ein neues BitmapData-Object erstellen
var m:Matrix = new Matrix();
m.scale(factor, factor);
var bd:BitmapData = new BitmapData(scale.width * factor, scale.height * factor, false);
bd.draw(scale, m, null, null, null, true);
return bd;
}








