Как можно сгладить изображение, используемое в качестве контрольного скина? - PullRequest
1 голос
/ 31 июля 2009

Я встраиваю изображение вот так:

[Embed(source="/tool_deleteUp.png")]
private static const c_deleteButton_styleUp:Class;

Я использую это так:

_removeButton = new Button();
_removeButton.setStyle('upSkin', c_deleteButton_styleUp);

Когда я поворачиваю кнопку, изображение не масштабируется плавно. Я знаю приемы, используемые для масштабирования изображения, загруженного в элемент управления Image, но я бьюсь головой о стену, пытаясь понять, как это сделать здесь.

Помощь!

Ответы [ 4 ]

1 голос
/ 01 августа 2009

Лучшее, более общее решение. Он не только обрабатывает описанный выше случай, но и делает это

  • без подклассов
  • Работает с любым UIComponent, включая IRawChildContainers (например, Container), которые скрывают дочерние элементы кожи в rawChildren
  • Сглаживает только добавленные элементы, а не запускается каждый раз, когда обновляется элемент управления.

public static function smoothChildBitmaps(object:UIComponent):void{

    // Define a nested smooth method
    function smoothChildren(val:UIComponent):void{
        var childList:IChildList;
        if(val is IRawChildrenContainer){
            childList = (val as IRawChildrenContainer).rawChildren;
        }
        else{
            childList = object;
        }

        for(var i:int = 0; i < childList.numChildren; i++){
            var child:Bitmap = childList.getChildAt(i) as Bitmap;
            if(child != null){
                child.smoothing = true;
            }
        }
    };

    // Call the nested method on the object right away
    smoothChildren(object);

    // Set up an event handler to re-call the method when a child is added
    object.addEventListener(
        Event.ADDED,
        function(args:Event):void{
            smoothChildren(object);
        }
    );
}
1 голос
/ 31 июля 2009

хакерским способом было бы пройти через детей / внуков кнопки, найти соответствующий Bitmap, который имеет тип c_deleteButton_styleUp, и установить его сглаживание в значение true ... это большой недостаток гибкости, что иногда требуются уроки для стилизации, хотя некоторых IDisplayObjectFactory вполне хватит для этой цели и сделает вашу жизнь намного проще ... но жизнь - это жизнь ...

не знаю, как использовать только чистый флекс ... единственная возможность, о которой я мог подумать, - это создать SWF-файл, содержащий ваш актив в качестве символа с включенным сглаживанием, и вставить этот символ из этого SWF-файла. ...

надеюсь, что это поможет ...

Greetz

back2dos

0 голосов
/ 16 апреля 2010

Я не знаю, что вы, ребята, ударили головой без обид, просто шучу . У меня был письменный стол: -P

В любом случае, представленные сценарии абсолютно бесполезны! Во-первых, вы не можете преобразовать один из компонентов в растровое изображение! Другое дело, что сценарий секунд с сыроедами в большей степени не такой же. сыновья получают своих детей и хром контейнера - вот и все. Если у вас есть кнопка в контейнере, вы можете попытаться сгладить хром контейнера - остальное останется прежним, так как все приведения к растровому изображению завершатся неудачей.

Итак, кто-нибудь сделал rdfm?

С другой стороны. Можно попробовать stage.quality к stagequality.best. Если вы посмотрите на форумы Adobe http://forums.adobe.com/thread/427899, вы увидите, что flex работает хорошо - просто воздух вроде игнорирует это :-(

Если эти два сценария когда-либо работали - особенно. часть с кнопкой в ​​виде растрового изображения - я пойду и разбью голову куда-нибудь :-). Я не вижу пути в иерархии классов, чтобы это могло работать. В конце концов, numChildren предоставляет вам только компоненты или объекты отображения, но не более того!

0 голосов
/ 31 июля 2009

Глупо, но это работает.

import flash.display.Bitmap;
import mx.controls.Button;

public class SmoothButton extends Button{
    protected override function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void{
        for(var i:int = 0; i < this.numChildren; i++){
            var child:Bitmap = this.getChildAt(i) as Bitmap;
            if(child != null){
                child.smoothing = true;
            }
        }
    }

}
...