2009-04-26 8 views
5

Mam przeglądarkę obrazów, którą napisałem w programie Flex, która skaluje rozmiar obrazu aktualnie wyświetlanego w zależności od rozmiaru przeglądarki. To właśnie tag wygląda następująco:Jakość skalowania obrazu 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()" 
    /> 

Oryginalny rozmiar obrazu jest zawsze większy niż obszar okna przeglądarki, a niestety, Flex nie wydają się robi bardzo dobrą robotę downscaling obraz. W rzeczywistości HTML w IE robi o wiele lepszą pracę, jeśli użyję tego tagu graficznego. Czy istnieje "jakość" ustawienia skalowania w Flexie, którego mi brakuje?

Dzięki.

Odpowiedz

0

To jest kłopot z Flex 3 - za pomocą obrazu w kontroli listy. Musisz bardzo uważać, aby skalowanie było prawidłowe.

Dlaczego nie spróbować odtwarzać z różnymi kombinacjami właściwości scaleContent i maintainAspectRatio elementów sterujących Image?

Oto poradnik na temat obrazów scaling.

+0

Dzięki za odpowiedź. Moja kontrola obrazu nie znajduje się w kontrolce listy. Używa oddzielnej kontroli listy jako odniesienia do samego rozmiaru. Przeczytałem samouczek, który łączyłeś, ale tak naprawdę nie mówił o jakości obrazu. Moje podstawowe pytanie brzmi: w jaki sposób kontrolujesz jakość podczas zmniejszania skali obrazu? Domyślnie Flex wydaje się mieć wiele problemów z aliasingiem podczas zmniejszania obrazu. Dzięki. –

0

spróbować ustawić szerokość i wysokość sterowania do wymiarów obrazu i ustawić właściwość scaleContent do prawdziwej własności

0

zestaw scaleContent do prawdziwej

1

Dowiedz się o Flash Smoothing Issue odkryłem kilka lat temu i napisałem o tym na blogu. Zasadniczo obrazy, które mają nieparzyste wymiary, nie zostaną wygładzone.

Aby rozwiązać ten problem użyć następującego fragmentu:

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);