缩放较大的图像问题

时间:2010-03-19 07:15:02

标签: flex image-processing image-manipulation scaling freeze

我正在开发flex应用程序,我希望将用户本地硬盘驱动器中的图像绘制到尺寸为640x360的画布上。

用户可以选择更高分辨率的图像&缩放到Canvas大小。

但是如果用户选择了像3000x2000这样较大分辨率的图像,那么缩放需要大量的时间和时间。冻结应用程序直到缩放完成。

是否有任何方法可以更快地缩放图像或进行某种线程化?

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

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我认为你的问题是使用Image,我正在开发一个应用程序,在画布上加载图像并缩放它们但是工作正常,大分辨率我会写一些代码,也许它会帮助你:

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,您应该尝试 为前者制作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
}