2009-04-26 5 views
5

J'ai une visionneuse d'image que j'ai écrite dans Flex qui met à l'échelle la taille de l'image que vous consultez actuellement en fonction de la taille du navigateur. C'est ce que l'étiquette ressemble à:Qualité de mise à l'échelle de l'image Adobe Flex

<mx:Image id="img" 
    maintainAspectRatio="true" 
    source="{horizontalList.selectedItem.image}-large.jpg" 
    height="100%" 
    horizontalCenter="0" 
    horizontalAlign="center" 
    top="5" 
    width="{horizontalList.width}" 
    updateComplete="onImageChange()" 
    click="onImgClick()" 
    /> 

La taille de l'image originale est toujours plus grande que la zone du navigateur, et malheureusement, Flex ne semble pas faire un très bon travail de downscaling l'image. En fait, HTML dans IE fait un bien meilleur travail si j'utilise son tag image. Existe-t-il un paramètre "qualité" pour la mise à l'échelle dans Flex qui me manque?

Merci.

Répondre

0

Ceci est un problème avec Flex 3 - en utilisant une image dans un contrôle de liste. Vous devez être très prudent pour obtenir la mise à l'échelle correcte. Pourquoi ne pas essayer de jouer avec différentes combinaisons de propriétés scaleContent et maintainAspectRatio des commandes Image?

Voici un tutoriel sur scaling Images.

+0

Merci pour la réponse. Mon contrôle d'image ne se trouve pas dans un contrôle de liste. C'est juste en utilisant un contrôle de liste séparé comme une référence à la taille elle-même. J'ai lu le tutoriel que vous avez lié, mais il ne parlait pas vraiment de la qualité de l'image. Ma question fondamentale est: Comment contrôlez-vous la qualité lors de la réduction d'échelle d'une image? Par défaut, Flex semble avoir beaucoup de problèmes d'aliasing lors de la réduction de l'image. Merci. –

0

essayez de définir la largeur et la hauteur du contrôle aux dimensions de l'image et définir la propriété scaleContent true

0

ensemble propriété scaleContent true

1

En savoir plus sur le Flash Smoothing Issue J'ai découvert il y a quelques années et j'ai blogué à propos de. Fondamentalement, les images qui ont une ou plusieurs dimensions impaires ne peuvent pas être lissées.

Pour résoudre ce problème utilisez l'extrait suivant:

var smoothBitmapData : BitmapData = new BitmapData(
    loadedBitmap.width + (loadedBitmap.width % 2), 
    loadedBitmap.height + (loadedBitmap.height % 2), 
    true, 0x00FF0000); 
smoothBitmapData.draw(loadedBitmap, null, null, null, null, true); 

smoothBitmap = new Bitmap(smoothBitmapData, PixelSnapping.NEVER, true); 
Questions connexes