0

我正在开发 flex 应用程序,我想在其中将图像从用户本地硬盘驱动器绘制到大小为 640x360 的画布上。

用户可以选择更大分辨率的图像并缩放到画布大小。

但是,如果用户选择了更大分辨率的图像,例如 3000x2000,则缩放需要很多时间并冻结应用程序直到缩放完成。

有什么方法可以更快地缩放图像或可以完成某种线程?

我正在使用矩阵来缩放图像,如下所示:

    var mat:Matrix = new Matrix();
    var scalex:Number = canvasScreen.width/content.width;
    var scaley:Number = canvasScreen.height/content.height;
    mat.scale(scalex,scaley);           

    canvasScreen.graphics.clear();      
    canvasScreen.graphics.beginBitmapFill(content.bitmapData,mat);
4

2 回答 2

0

为什么不在 Image 标签上设置 'scaleContent' 属性...图像将被缩放以适合您的 Image 标签。

于 2010-03-19T07:29:48.310 回答
0

我认为你的问题是图像的使用,我正在开发一个应用程序,它可以在画布上加载图像并缩放它们,但是对于大分辨率来说效果很好我会写一些代码也许它会帮助你:

public class ImageObject extend Canvas
{
    public var image :Image;

    ..................
    ..................

    override protected function childrenCreated() : void
    {
        super.childrenCreated();
        addChild( image );
    }

    public function scaleImage():void
    {
        // Caluculate your xVal and yVal here

        var m:Matrix = new Matrix();
        m.scale( xVal, yVal );
        m.concat( image.transform.matrix );

        image.transform.matrix = m;
    }
}

如果您不能将图像作为子图像添加到 ImageObject 中,您应该尝试为 ex 制作 2 个容器:

public class ImageObject extend Canvas
{

public var imageContainer :Canvas;
public var otherContainer :Canvas;

...........................
...........................

override protected function childrenCreated() : void
{
        super.childrenCreated();
        addChild( imageContainer); // add here your image
        addChild( otherContainer ); // here other objects
}
于 2010-03-19T10:19:00.820 回答