Dire che ho un BitmapData di 600x600 e voglio ridurlo a 100x100.Qual è il modo migliore per ridimensionare un oggetto BitmapData?
risposta
Questo funziona:
var scale:Number = 1.0/6.0;
var matrix:Matrix = new Matrix();
matrix.scale(scale, scale);
var smallBMD:BitmapData = new BitmapData(bigBMD.width * scale, bigBMD.height * scale, true, 0x000000);
smallBMD.draw(bigBMD, matrix, null, null, null, true);
var bitmap:Bitmap = new Bitmap(smallBMD, PixelSnapping.NEVER, true);
Senza scrivere il codice da solo. Il modo in cui mi avvicinerei a questo sarebbe quello di creare un nuovo oggetto BitmapData della dimensione desiderata e quindi utilizzare il metodo bitmap.draw per copiare quello grande in quello piccolo. Il metodo bitmap.draw accetta anche un argomento matrice che è possibile utilizzare per ridimensionare quando si copia.
public function drawScaled(obj:IBitmapDrawable, thumbWidth:Number, thumbHeight:Number):Bitmap {
var m:Matrix = new Matrix();
m.scale(WIDTH/obj.width, HEIGHT/obj.height);
var bmp:BitmapData = new BitmapData(thumbWidth, thumbHeight, false);
bmp.draw(obj, m);
return new Bitmap(bmp);
}
IBitmapDrawable è un'interfaccia per DisplayObject e BitmapData.
da: http://www.nightdrops.com/2009/02/quick-reference-drawing-a-scaled-object-in-actionscript/
Il problema con l'utilizzo di ridimensionamento della matrice è che non fa alcuna antialiasing o smoothing - questo è probabilmente OK se si è sicuri che sarà solo mai stato downscaling, ma un metodo più generale userei la classe Image per fare il ridimensionamento. In AS3 questo non sarebbe mai stato aggiunto all'elenco di visualizzazione, quindi sarebbe stato usato solo "fuori schermo". Qualcosa di simile (con i tuoi dati bitmap come "sourceBitmapData"):
var image:Image = new Image();
image.load(new Bitmap(sourceBitmapData, PixelSnapping.NEVER, true));
var scale:uint = 100/600; // this is from your example of 600x600 => 100x100
var scaledWidth:uint = sourceBitmapData.width * scale;
var scaledHeight:uint = sourceBitmapData.height * scale;
image.content.width = scaledWidth;
image.content.height = scaledHeight;
var scaledBitmapData:BitmapData = new BitmapData(scaledWidth, scaledHeight);
scaledBitmapData.draw(image.content);
image = null;
È quindi possibile utilizzare "scaledBitmapData" al posto di "sourceBitmapData" di fare tutto ciò con.
Da dove viene questa classe Image? http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/index.html?filter_flashplayer=10.1 non elenca una classe Image come parte della libreria AS3. – Dwayne
Votato come nessun riferimento alla classe Image – Jotham
è http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/mx/controls/Image.html o http://help.adobe.com /en_US/FlashPlatform/reference/actionscript/3/spark/components/Image.html –
Con levigante:
function BitmapScaled(source:IBitmapDrawable, thumbWidth:Number, thumbHeight:Number):BitmapData {
var mat:Matrix = new Matrix();
mat.scale(thumbWidth/source.width, thumbHeight/source.height);
var bmpd_draw:BitmapData = new BitmapData(thumbWidth, thumbHeight, false);
bmpd_draw.draw(source, mat, null, null, null, true);
return bmpd_draw;
}
Il metodo draw accetta IBitmapDrawable che è un'interfaccia per DisplayObject e BitmapData.
Ecco una variante di quanto sopra che aggiunge il supporto per zoom, tratto e letterbox. Potrebbe non fornire il supporto per il ritaglio.
var newSizeBitmapData:BitmapData = resizeBitmapData(myBitmapData, newWidth, newHeight);
/**
* Resize display object or bitmap data to a new size
**/
public static function resizeBitmapData(bitmapDrawable:IBitmapDrawable, width:Number, height:Number, scaleMode:String="none",
smooth:Boolean = true, transparent:Boolean = true, fillColor:Number = 0x00000000):BitmapData {
var sizedBitmapData:BitmapData;
var matrix:Matrix;
matrix = getSizeByScaleMode(width, height, Object(bitmapDrawable).width, Object(bitmapDrawable).height, scaleMode);
sizedBitmapData = new BitmapData(width, height, transparent, fillColor);
sizedBitmapData.draw(bitmapDrawable, matrix, null, null, null, smooth);
return sizedBitmapData;
}
// Get correct scale. Inspired from code in Apache Flex (license Apache 2.0)
public static function getSizeByScaleMode(maxWidth:int, maxHeight:int,
width:int, height:int,
scaleMode:String="letterbox",
dpi:Number=NaN):Matrix {
var aspectRatio:String = (maxWidth < maxHeight) ? "portrait" : "landscape";
var orientation:String = aspectRatio;
var matrix:Matrix = new Matrix();
var scaleX:Number = 1;
var scaleY:Number = 1;
switch(scaleMode) {
case "zoom":
scaleX = Math.max(maxWidth/width, maxHeight/height);
scaleY = scaleX;
break;
case "letterbox":
scaleX = Math.min(maxWidth/width, maxHeight/height);
scaleY = scaleX;
break;
case "stretch":
scaleX = maxWidth/width;
scaleY = maxHeight/height;
break;
}
if (scaleX != 1 || scaleY != 0) {
width *= scaleX;
height *= scaleY;
matrix.scale(scaleX, scaleY);
}
matrix.translate(-width/2, -height/2);
matrix.translate(maxWidth/2, maxHeight/2);
return matrix;
}
- 1. MVC3: Qual è il modo migliore per ottenere il percorso di visualizzazione da un oggetto HtmlHelper?
- 2. Qual è il modo migliore per aggiungere un articolo a un oggetto IEnumerable <T>?
- 3. Qual è il modo migliore per ridimensionare le immagini in Java?
- 4. Qual è il modo migliore per costruire un NSCompoundPredicate complesso?
- 5. Qual è il modo migliore per chiudere un ramo Mercurial?
- 6. Qual è il modo migliore per aggiornare l'entità in JPA
- 7. qual è il modo migliore per implementare hashCode()?
- 8. Qual è il modo migliore per aggiornare solo alcuni campi di un oggetto in MVC?
- 9. Qual è il modo migliore per creare un oggetto modello in Django?
- 10. Qual è il modo migliore per trasformare un oggetto proxy EF nell'oggetto POCO originale?
- 11. Qual è il modo migliore per ripulire un oggetto in Java?
- 12. Qual è il modo migliore per archiviare un oggetto JSON piuttosto grande in MySQL
- 13. Qual è il modo migliore per inviare un oggetto su una rete in Python?
- 14. Qual è il modo migliore per deridere un oggetto di terze parti in ruby?
- 15. Qual è il modo migliore per organizzare più sottoview?
- 16. Qual è il modo migliore per rilevare il colore bianco?
- 17. Qual è il modo migliore per documentare il codice f #?
- 18. Qual è il modo migliore per testare un'app per rails?
- 19. Qual è il modo migliore per riutilizzare il parser Lua?
- 20. Il modo migliore per ridimensionare dinamicamente una pagina?
- 21. Come cancellare un'area in un oggetto BitmapData?
- 22. Qual è il modo migliore per dividere due oggetti TimeSpan?
- 23. Qual è il modo migliore per creare una ricerca whois?
- 24. Qual è il modo migliore per eseguire jQuery .change()
- 25. Qual è il modo migliore per esportare enormi cataloghi Magento
- 26. Qual è il modo migliore per iniziare con PyQt 5?
- 27. Qual è il modo migliore per impaginare una classe C#?
- 28. Qual è il modo migliore per guardare un'applicazione desktop?
- 29. Qual è il modo migliore per analizzare questo in C++?
- 30. Qual è il modo migliore per "ripristinare" le modifiche?
funziona perfettamente, grazie! –
questo '0x000000' è molto importante, senza che non ci sia trasparenza – Cherniv