0

我有一个 Flash 应用程序,它有两件事 1.浏览新的图像组件 2.构建滚动图像库组件-只有 10 个最近上传的图像

如何在用户浏览时保存新图像并将其存储在本地,然后在以后的会话中再次使用它(从保存的位置加载图像并在用户下次访问时再次构建滚动条)

请帮助我知道如何在本地保存图像,然后再使用它,更像是一个历史应用程序

4

1 回答 1

3

干得好 :

这段代码将图像保存在共享对象中,并在您重新启动时恢复它们。

结果

package{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.net.FileFilter;
    import flash.net.FileReference;
    import flash.net.SharedObject;
    import flash.text.TextField;
    import flash.utils.ByteArray;

    [SWF(width="100",height="800")]
    public class TestSO extends Sprite{

        private var _soFileIndex : SharedObject = SharedObject.getLocal("fileIndex");
        private var _addBtn : Sprite = new Sprite;
        private var _fr : FileReference = new FileReference;

        public function TestSO(){
            // Add a button
            var tf : TextField = new TextField;
            tf.text = "Add image";
            tf.width = 100;
            tf.height = 20;
            tf.selectable = false;
            _addBtn.addChild(tf);
            _addBtn.graphics.beginFill(0xDDDDDD);
            _addBtn.graphics.drawRect(0,0,_addBtn.width, _addBtn.height);
            _addBtn.graphics.endFill();
            addChild(_addBtn);

            // If file index is empty
            if(!_soFileIndex.data.index)
                _soFileIndex.data.index = [];
            else{
                // Display stored images
                for each(var fileName : String in _soFileIndex.data.index)
                    displayImage(fileName, SharedObject.getLocal(fileName).data.bytes)
            }

            // Listeners
            _addBtn.addEventListener(MouseEvent.CLICK, onAddClick);
            _fr.addEventListener(Event.SELECT, onFileSelected);
            _fr.addEventListener(Event.COMPLETE, onFileLoaded);
        }

        // Ask for a file
        private function onAddClick(e : Event) : void{
            _fr.browse([new FileFilter("Images", "*.jpg;*.jpeg;*.png")]);
        }

        // open file
        private function onFileSelected(e : Event) : void{
            _fr.load();
        }

        // save file
        private function onFileLoaded(e : Event) : void{

            var fileName : String = _fr.name.split(" ").join("_");
            // Save a reference to filename
            if(_soFileIndex.data.index.indexOf(fileName) == -1)
                _soFileIndex.data.index.push(fileName);
            else return;


            var fileSo : SharedObject = SharedObject.getLocal(fileName);
            fileSo.data.bytes = _fr.data;
            fileSo.flush();

            displayImage(fileName, _fr.data);
        }

        // Display an image
        private function displayImage(name : String, data : ByteArray):void{
            var item : Sprite = new Sprite;

            // Load image
            var imgLoader : Loader = new Loader;
            imgLoader.contentLoaderInfo.addEventListener(Event.COMPLETE,onImageLoaded);
            imgLoader.loadBytes(data);
            item.addChild(imgLoader);

            var label : TextField = new TextField;
            label.text = name;
            label.y = 100;
            label.height = 20;
            item.addChild(label);

            item.y = height;
            addChild(item);
        }

        // Resize image when loaded
        private function onImageLoaded(e : Event) : void{
            e.target.content.width = e.target.content.height = 100;
            e.target.removeEventListener(Event.COMPLETE,onImageLoaded);
        }
    }
}
于 2012-11-16T10:32:28.040 回答