嵌入未知的文件格式

Fot*_*gos 1 actionscript-3 flash-cs4 flex4

使用Embed标签,我们不仅可以在swf文件中嵌入swf或jpg等,还可以嵌入不支持的文件格式,例如:

Embed[(source="mzip.zip", mimeType="application/octet-stream")]

public static MyZip:Class;

package { import flash.utils.ByteArray;

public final class Resource {       
    [Embed(source="p2.zip", mimeType="application/octet-stream")]
    public static const MyZip:Class;

    public static function getByteArrayFromZip():ByteArray {
        var zip:ByteArray = new MyZip as ByteArray;
        return zip;
    }
}
Run Code Online (Sandbox Code Playgroud)

}

public class Main extends Sprite {
private var ship:Bitmap; private var lib:FZipLibrary;

    public function Main() {            
        lib = new FZipLibrary();    
        lib.formatAsBitmapData(".jpg");       
        lib.addEventListener(Event.COMPLETE,onCompleteHandler);

        var fzip:FZip = new FZip();
        fzip.loadBytes(Resource.getByteArrayFromZip());
        lib.addZip(fzip);
    }

   private function onCompleteHandler(evt:Event) {
        var image:BitmapData = lib.getBitmapData("assets/graphics/scratchers/myimg.jpg");
        trace("Size: " + image.width + "x" + image.height); 
        var sa0img0:Bitmap = new Bitmap(image);
        addChild(sa0img0);
   }
}
Run Code Online (Sandbox Code Playgroud)

}

当我实例化这样一个类时,我会得到什么类型的对象?是否可以从这个类中获取ByteArray?

当我这样做: TypeError: Error #1009: Cannot access a property or method of a null object reference. at Main/onCompleteHandler() at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at deng.fzip::FZipLibrary/processNext() at deng.fzip::FZipLibrary/loaderCompleteHandler()

Embed[(source="mzip.zip", mimeType="application/octet-stream")]

public static MyZip:Class;

package { import flash.utils.ByteArray;

public final class Resource {       
    [Embed(source="p2.zip", mimeType="application/octet-stream")]
    public static const MyZip:Class;

    public static function getByteArrayFromZip():ByteArray {
        var zip:ByteArray = new MyZip as ByteArray;
        return zip;
    }
}
Run Code Online (Sandbox Code Playgroud)

}

public class Main extends Sprite {
private var ship:Bitmap; private var lib:FZipLibrary;

    public function Main() {            
        lib = new FZipLibrary();    
        lib.formatAsBitmapData(".jpg");       
        lib.addEventListener(Event.COMPLETE,onCompleteHandler);

        var fzip:FZip = new FZip();
        fzip.loadBytes(Resource.getByteArrayFromZip());
        lib.addZip(fzip);
    }

   private function onCompleteHandler(evt:Event) {
        var image:BitmapData = lib.getBitmapData("assets/graphics/scratchers/myimg.jpg");
        trace("Size: " + image.width + "x" + image.height); 
        var sa0img0:Bitmap = new Bitmap(image);
        addChild(sa0img0);
   }
}
Run Code Online (Sandbox Code Playgroud)

}

TypeError: Error #1009: Cannot access a property or method of a null object reference. at Main/onCompleteHandler() at flash.events::EventDispatcher/dispatchEventFunction() at flash.events::EventDispatcher/dispatchEvent() at deng.fzip::FZipLibrary/processNext() at deng.fzip::FZipLibrary/loaderCompleteHandler()

Embed[(source="mzip.zip", mimeType="application/octet-stream")]

public static MyZip:Class;

我得到以下错误: package { import flash.utils.ByteArray;

public final class Resource {       
    [Embed(source="p2.zip", mimeType="application/octet-stream")]
    public static const MyZip:Class;

    public static function getByteArrayFromZip():ByteArray {
        var zip:ByteArray = new MyZip as ByteArray;
        return zip;
    }
}
Run Code Online (Sandbox Code Playgroud)

}

Joo*_*ony 5

是的,只需实例化MyZip并转换为ByteArray.

Embed[(source="mzip.zip", mimeType="application/octet-stream")]
public static var MyZip:Class;

var zip:ByteArray = new MyZip() as ByteArray;
Run Code Online (Sandbox Code Playgroud)