Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flash 图像缩放与平滑_Flash_Image_Actionscript_Actionscript 2_Smoothing - Fatal编程技术网

Flash 图像缩放与平滑

Flash 图像缩放与平滑,flash,image,actionscript,actionscript-2,smoothing,Flash,Image,Actionscript,Actionscript 2,Smoothing,我正在使用AS2从外部站点将一些图像动态导入SWF。 当我从计算机加载图像时,平滑效果非常好,但当我尝试从外部服务器加载图像时,平滑效果不起作用 我的代码: var imageLoad:MovieClipLoader = new MovieClipLoader(); imageLoad.addListener({ onLoadInit:function (target:MovieClip) { target._quality = "BEST

我正在使用AS2从外部站点将一些图像动态导入SWF。 当我从计算机加载图像时,平滑效果非常好,但当我尝试从外部服务器加载图像时,平滑效果不起作用

我的代码:

    var imageLoad:MovieClipLoader = new MovieClipLoader();
    imageLoad.addListener({
        onLoadInit:function (target:MovieClip) {
            target._quality = "BEST";
            target._width = 160;
            target._yscale = target._xscale;
            if (target._height>105) {
                target._height = 105;
                target._xscale = target._yscale;
            }
            target.forceSmoothing = true;
        }
    });
imageLoad.loadClip(imageURL,imageMC);
我已经尝试了我在网上能找到的每一个解决方案,但没有人使用平滑


有什么解决办法吗?

不确定,但您遇到的问题似乎是跨域问题的症状。除非跨域策略文件允许,否则如果加载的SWFs属性来自不同的域,您将无法修改该属性(在本例中为平滑)

如果这不是问题的话,我记得从根本上说,绘制位图数据总是能解决问题。 如果结果是一个黑色图像,那么您几乎可以肯定存在跨域问题。 本文精确地解释了AS2的技术:

AS2。。。啊。。。记忆(更像是噩梦)

试试我的“好老”位图加载器。就像。。。我已经用了很多年了,从来没有让我失望过。。。它写得不漂亮,而且里面有一些双作用域设置器。。。但我不在乎。它很老了,而且它(总是)完美地完成了它的工作。构造函数中需要一个布尔值,用于将平滑设置为true或false

import flash.display.BitmapData;

class BitmapLoader extends Object {

    private var mLoader : MovieClipLoader;
    private var scope : Object;
    private var _mc : MovieClip;
    private var _url : String;
    private var _func : Object;
    private var smooth : Boolean;

    public function BitmapLoader(smooth : Boolean) 
    {
        this.smooth = smooth;
        mLoader = new MovieClipLoader( );
        addListener( this );    
    }

    public function addListener(inListener : Object) : Void 
    {
        mLoader.addListener( inListener );
        scope = inListener;
    }

    public function removeListener(inListener : Object) : Void 
    {
        mLoader.removeListener( inListener );
    }

    private function onLoadInit(inTarget : MovieClip) : Void 
    {
        var bitmap : BitmapData = new BitmapData( inTarget._width, inTarget._height, true, 0x000000 );      
        bitmap.draw( inTarget );
        var parent : MovieClip = inTarget._parent;
        var img : MovieClip = parent.createEmptyMovieClip( "imageloader_smooth_mc", parent.getNextHighestDepth( ) );
        inTarget.unloadMovie( );
        inTarget.removeMovieClip( );
        delete inTarget;
        img.attachBitmap( bitmap, img.getNextHighestDepth( ), "never", true );
        scope[_func]( img );
    }

    private function onLoadError(errorCode : String, httpStatus : Number) : Void 
    {
        error( errorCode, httpStatus );
    }

    /**
     * loadBitmap( http://www.test.nl/img.jpg, movieclip, "dothis");
     */
    public function loadBitmap(url : String, mc : MovieClip, func : Object) : Void 
    {
        _url = url;
        _mc = mc;
        _func = func;
        var raw : MovieClip = _mc.createEmptyMovieClip( "imageloader_raw_mc", _mc.getNextHighestDepth( ) );
        mLoader.loadClip( _url, raw );
    }

    private function error(errorCode : String, httpStatus : Number) : Void 
    {
        var raw : MovieClip = _mc.createEmptyMovieClip( "imageloader_raw_mc", _mc.getNextHighestDepth( ) );
        mLoader.loadClip( "img/notfound.jpg", raw );
    };
}
您可以这样使用此类:

    var loader : BitmapLoader = new BitmapLoader( true );
loader.addListener( this );
loader.loadBitmap( "http://test.nl/example.jpg", this, "doneLoading" );
“true”是平滑布尔值,addListener(this)是为了防止范围问题(AS2 bleeh),而“doneLoading”是加载完成时调用的函数名

希望这对你有用


祝你好运

用缩放矩阵在另一个位图数据上绘制它怎么样? 我听说它将比缩放位图本身更平滑

下面的代码来自


Crossdomain不是问题,因为我正在谈论的服务器有一个Crossdomain.xml文件。该代码的问题是,我无法让它调整图像大小,就像我在代码中所做的那样。你知道我将如何使用该代码来调整IAMGE的大小吗?你可以在函数“doneLoading”中这样做。i、 例如:公共函数doneLoading(mc:MovieClip):Void{mc.\uwidth=160;mc.\uyscale=mc.\uxscale;if(target.\uheight>105){mc.\uxscale=105;mc.\uxscale=target.\uyscale;}
// source in this example is a DisplayObject
var temp:BitmapData = new BitmapData( sourceWidth, sourceHeight );
temp.draw( source );

var output:BitmapData = new BitmapData( outputWidth, outputHeight );

var matrix:Matrix = new Matrix();
matrix.scale( outputWidth / sourceWidth, outputHeight / sourceHeight );

output.draw( temp, matrix, null, null, null, true );
temp.dispose();