Почему это изображение не изменится, чтобы соответствовать спрайту? - PullRequest
0 голосов
/ 13 апреля 2010

У меня есть этот фрагмент кода ActionScript, который должен изменить размер изображения в соответствии со спрайтом: (как в изменить масштаб изображение не просто обрезать его)

package 
{
    import flash.display.Sprite;
    import flash.display.Bitmap;
    import flash.events.Event;

    public class Main extends Sprite 
    {
        [Embed(source = 'img.png')]
        private var TheImage:Class;

        public static const  TheImageWidth:Number = 1300;
        public static const TheImageHeight:Number = 1300;

        public function Main():void 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point

            var image:Bitmap = new TheImage();

            addChild(image);

            image.scaleX = width / TheImageWidth;
            image.scaleY = height / TheImageHeight;
        }

    }

}

Почему это не работает? Изображение не получает правильных размеров.

Ответы [ 2 ]

0 голосов
/ 06 ноября 2013

Я должен был сделать что-то подобное для изображений. У нас были проблемы с использованием MapImage и MapImageLayer с использованием ArcGIS for Flex 2.5. Кажется, это исправить в 3.5, В любом случае мне пришлось поместить изображение в спрайт и нарисовать изображение на основе ширины спрайтов. Если вы хотите масштабировать изображение до размеров спрайта, вам нужно будет использовать Matrix API и метод масштабирования. Переданные значения должны быть разделены на ширину спрайта на ширину изображения, если предположить, что изображение больше, чем ваш спрайт. Сделайте то же самое с высотой. Вот код, который я использовал для выполнения задачи.

                const point:MapPoint = geometry as MapPoint;

                sprite.x = toScreenX(map, point.x);
                sprite.y = toScreenY(map, point.y);

                // grab left x point for upper left then for lower right
                // actua
                var bottomLeftX:Number = toScreenX(map, geomertyWrapper.extent.xmin);
                var topRightX:Number = toScreenX(map, geomertyWrapper.extent.xmax);

                var bottomLeftY:Number = toScreenY(map, geomertyWrapper.extent.ymin);
                var topRightY:Number = toScreenY(map, geomertyWrapper.extent.ymax);

                iconWidth = Math.abs(topRightX - bottomLeftX);
                iconHeight = Math.abs(topRightY - bottomLeftY);

                sprite.width = iconWidth;
                sprite.height = iconHeight;

                var scaleX:Number = iconWidth/bitmapData.width;
                var scaleY:Number = iconHeight/bitmapData.height;

                m_matrix.a = 1.0;
                m_matrix.d = 1.0;
                m_matrix.scale(scaleX, scaleY);
                m_matrix.tx = -iconWidth / 2;
                m_matrix.ty = -iconHeight / 2;

                //Values needed for drawing AlertNotificationInstance

                sprite.graphics.beginBitmapFill(m_bitmapData, m_matrix, false, false);
                sprite.graphics.drawRect(m_matrix.tx, m_matrix.ty, 
                    iconWidth, 
                    iconHeight);
                sprite.graphics.endFill(); 

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

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

1001 * попробовать *

image.image.content.width = TheImageWidth;
image.image.content.height = TheImageHeight;
...