2009-10-20 4 views
2

J'essaie d'afficher un bytearray en tant qu'image redimensionnée. L'image s'affiche correctement, mais le dimensionnement est désactivé. Laisse-moi expliquer.Redimensionnement d'une image à partir d'un ByteArray décodé

première fois que je les données d'image codées, alors je dois décoder les données d'image

// Instantiate decoder 
var decoder:Base64Decoder = new Base64Decoder(); 
// Decode image data 
decoded.decode(picture.data); 
// Export data as a byteArray 
var byteArray:ByteArray = decoder.toByteArray(); 
// Display image 
var img:Image = new Image(); 
img.load(byteArray); 

Cela fonctionne. L'image est affichée correctement. Cependant, si je code en dur la hauteur de l'image (img), l'image redimensionnée est affichée correctement, mais dans une boîte avec les dimensions de l'image d'origine. Par exemple, si l'image d'origine a une hauteur de 300 pixels et une largeur de 200 pixels et que la propriété img.height est définie sur 75; l'image redimensionnée avec une hauteur de 75 est affichée correctement. Mais l'image redimensionnée est affichée dans le coin supérieur gauche du conteneur img qui est toujours défini sur une hauteur de 300 pixels et une largeur de 200 pixels. Pourquoi ça fait ça? Et quelle est la solution?

La meilleure façon d'illustrer le problème est de placer l'image dans une VBox et d'afficher les limites de la VBox. À partir du bloc de code ci-dessus, si je change la hauteur de l'image et que je règle l'image pour maintenir le rapport d'aspect (qui par défaut est réglé sur vrai mais je l'ajoute ici pour être complet). le problème devient clair. Je travaille sur ce problème depuis des jours et je n'arrive pas à trouver une solution. Des idées? Qu'est-ce que je rate?

Répondre

1

La solution I utilisée est la suivante:

J'ai créé un écouteur d'événement pour l'objet d'affichage img. Ensuite, après le chargement de l'img, je définis manuellement la hauteur et la largeur de l'image. Je sais ce que je veux que la hauteur (preHeight) soit ainsi codée en dur. Je calcule ensuite la largeur et définit cela comme la largeur de l'image. Pour une raison quelconque, j'ai dû utiliser les propriétés explicitHeight et explicitWidth pour obtenir enfin le bon dimensionnement.

J'espère que cela aide quelqu'un.

img.addEventListener(FlexEvent.CREATION_COMPLETE, onCreationComplete); 

private function onCreationComplete(event:FlexEvent) : void 
{ 
    img.addEventListener(Event.COMPLETE, onImageLoadComplete); 
} 

private function onImageLoadComplete(event:Event) : void 
{ 
    var image:Image = event.currentTarget as Image; 
    var preHeight:Number = 0; 
    var h:uint = Bitmap(image.content).bitmapData.height; 
    var w:uint = Bitmap(image.content).bitmapData.width; 

    // Check height 
    preHeight = h > 170 ? 170 : h; 
    // Set the width 
    img.explicitWidth = (preHeight * w)/h; 
    img.explicitHeight = preHeight; 
} 
Questions connexes