我正在开发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);
答案 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
}