Растровый объект AS3 не сглаживается при низких значениях масштаба - PullRequest
0 голосов
/ 07 февраля 2012

Мне нужна помощь в получении растрового изображения для правильного применения сглаживания после очень малого масштабирования.

То, что я сейчас делаю, загружает изображение .png с помощью объекта Loader.После загрузки файла я преобразовал содержимое loaderInfo в растровое изображение и установил для значения сглаживания значение true.Это работает без проблем, пока я не достигну значения ScaleX и ScaleY меньше 0,5.

Например, если у меня есть объект 1000x1000, его уменьшение до 200x200 приводит к тому, что сглаживание растрового изображения больше не работает.

Я могу воспроизвести проблему, используя все следующие методы определения размера:

  • Измените свойства scaleX и scaleY на растровом изображении.
  • Непосредственное изменение свойств высоты и ширины растрового изображения.
  • Добавьте растровое изображение как дочерний элемент другого спрайта и измените свойства scaleX и scaleY спрайта.
  • Добавьте растровое изображение как дочерний элемент другого спрайта и измените свойства высоты и ширины спрайта.
  • Создание нового объекта BitmapData с масштабом матрицы и затем рисование на нем оригинальных BitmapData.

Я также пробовал некоторые другие обходные пути, которые я нашел при поиске, например:

  • установка scaleX изображения на 1,001 или 0,999
  • , при этом высота и ширина объекта Bitmap должны быть четными числами.

НижеПример кода для воспроизведения проблемы.(Я запускаю это локально, поэтому у меня есть копия testimage.png в моей папке bin-debug)

public class MainObj
{
    public var comp:UIComponent;

    public function MainObj()
    {
    }

    public function LoadContent():void
    {
        var str:String = "testimage.png";
        var l:Loader = new Loader();
        l.contentLoaderInfo.addEventListener(Event.COMPLETE, LoadContentComplete);
        l.load(new URLRequest(str));
    }

    public function LoadContentComplete(e:Event):void
    {
        var li:LoaderInfo = e.target as LoaderInfo;
        var bmp:Bitmap = li.content as Bitmap;

        bmp.smoothing = true;
        bmp.scaleX = 0.2;
        bmp.scaleY = 0.2;
        comp.addChild(bmp);
    }
}

У меня также есть файл mxml, который создает экземпляр класса MainObj и устанавливает свойство compк экземпляру UIComponant, который был добавлен в код mxml приложения (UIComponent - это то, что позволяет добавлять растровое изображение к элементам Spark, составляющим mxml).

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" 
               minWidth="955" minHeight="600"
               width="800" height="600">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
    </fx:Declarations>
    <fx:Script>
        <![CDATA[
            private var mainObj:MainObj;
            override protected function initializationComplete():void
            {
                mainObj = new MainObj();
                mainObj.comp = comp;
                mainObj.LoadContent();

                super.initializationComplete();
            }
        ]]>
    </fx:Script>
    <s:VGroup width="100%" height="100%">
        <mx:UIComponent id="comp" width="100%" height="100%"/>
    </s:VGroup>
</s:Application>

Ответы [ 2 ]

2 голосов
/ 08 февраля 2012
  • Масштабирование до размеров, которые являются степенью 2, при этом исходный размер также является степенью 2
  • Mipmapping - это популярный в игровой индустрии термин, обозначающий несколько увеличенных версий изображения для уменьшения масштабируемости псевдонимов. (особенно для радикальных изменений размеров)
  • В качестве хака для Flash Player 10 установите для свойства 'z' значение 1. Это включит аппаратное сглаживание растрового изображения, хотя потребляет больше памяти и производительности.
0 голосов
/ 26 ноября 2014

Я обнаружил, что установка свойства stage.quality на StageQuality.BEST улучшает сглаживание масштабированных растровых изображений.

...