大图像加载问题

时间:2010-11-24 07:05:22

标签: flex actionscript-3

我已经厌倦了从下面的网址加载图片是我的示例代码,当试图加载宽度或高度大于8191像素的大图像时,没有调度Event.COMPLETE,我知道flash播放器10 BitmapData限制,因此我们无法加载大于此8191像素限制的图像?是否有任何解决方法可用于此或您建议的任何其他方法?

 private function loadImage(url:String):void
                            {
                                var request:URLRequest = new URLRequest(url);               
                                var imageLoader:Loader = new Loader();              
                                var context:LoaderContext;
                                context = new LoaderContext();
                                context.checkPolicyFile = true; 
                                imageLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, image_completeHandler);      
                                imageLoader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

                                imageLoader.load(request,context);
                            }

            private function image_completeHandler(event:Event):void
            {
                   trace(" Image load Complete");
            }

            private function ioErrorHandler(event:IOErrorEvent):void 
            {
            trace("ioErrorHandler: " + event);
         }

1 个答案:

答案 0 :(得分:3)

我建议您拆分图像。如果你需要Flash来处理图像(移动,缩放),我会写一个持有者类,将图像片段添加为自己的子片。

我在下面添加了一些代码和测试链接。查看行动中的代码here。 (等待SWF加载)。

//识别TestClass

package
{
    import com.kazumakzak.display.TileImage;

    import flash.display.Sprite;
    import flash.events.Event;

    public class TestBigImage extends Sprite
    {

        [Embed(source="assets/piece.png")]
        private var imageClass : Class;

        private var _image : TileImage;
        private var _counter : Number = 0;

        public function TestBigImage()
        {
            // create image with tile size 640x480
            _image = new TileImage(640, 480);

            // add tiles at positions 
            _image.addTile(new imageClass(), 1, 1);
            _image.addTile(new imageClass(), 1, 2);
            _image.addTile(new imageClass(), 2, 1);
            _image.addTile(new imageClass(), 2, 2);
            _image.addTile(new imageClass(), 3, 1);
            _image.addTile(new imageClass(), 3, 2);

            // add to display list
            addChild(_image);


            addEventListener(Event.ENTER_FRAME, render);
        }

        private function render(event : Event) : void
        {
            _counter += 0.05;
            _image.x = -640 + Math.cos(_counter) * 640
        }
    }
}

// TileImage.as

package com.kazumakzak.display
{
    import flash.display.Bitmap;
    import flash.display.Sprite;

    public class TileImage extends Sprite
    {

        private var _tileWidth : int;
        private var _tileHeight : int;

        public function TileImage(tileWidth : int, tileHeight : Number)
        {
            _tileWidth = tileWidth;
            _tileHeight = tileHeight;
        }

        public function addTile(source : Bitmap, tileX : int, tileY : int) : void
        {
            source.x = (tileX-1) * _tileWidth;
            source.y = (tileY-1) * _tileHeight;

            addChild(source);
        }
    }
}
相关问题