URLLoader を使用してメイン アプリケーションに swf ファイルをロードしています。ロードした swf ファイルの背景色を取得したいと考えています。(1つの解決策は、ロードされたswfのバイトコードを読み取ることだと聞きました)
2217 次
2 に答える
5
はい、swf バイナリ データを調べる必要があります。ここで、swf 形式について簡単に説明します。そして、これはさまざまな種類のタグについて少し詳しく説明しています。あなたの要件は、通常、swf の最初または 2 番目のタグである SetBackgroundColor タグ (タグ タイプ = 9) を見つけることです。
swf ファイルのバイトはリトル エンディアン順に従うため、データの読み取りには注意が必要です。ほとんどの場合、データは圧縮されます (最初の 3 バイトは「CWS」になります)。そのため、9 バイト目以降 (9 番目を含む) は、処理前にすべてのデータを解凍 (ByteArray.decompress) する必要があります。
いくつかのサンプルコード:)
package {
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.utils.*;
public class Test1 extends Sprite{
private var stream:URLStream;
public function Test1():void {
stream = new URLStream();
stream.load(new URLRequest("some.swf"));
stream.addEventListener(Event.COMPLETE, onComplete);
}
private function onComplete(e:Event):void {
var bytes:ByteArray = new ByteArray();
bytes.endian = Endian.LITTLE_ENDIAN;
stream.readBytes(bytes, 0, 8);
var sig:String = bytes.readUTFBytes(3);
trace("SIG = " + sig);
trace("ver = " + bytes.readByte());
trace("size = " + bytes.readUnsignedInt());
var compBytes:ByteArray = new ByteArray();
compBytes.endian = Endian.LITTLE_ENDIAN;
stream.readBytes(compBytes);
if (sig == "CWS") {
compBytes.uncompress();
}
var fbyte = compBytes.readUnsignedByte();
var rect_bitlength = fbyte >> 3;
var total_bits = rect_bitlength * 4;
var next_bytes = Math.ceil((total_bits - 3)/ 8);
for(var i=0; i<next_bytes; i++) {
compBytes.readUnsignedByte();
}
trace("frameRate = " + compBytes.readUnsignedShort());
trace("frameCount = " + compBytes.readUnsignedShort());
while(true) {
var tagcodelen:Number = compBytes.readUnsignedShort();
var tagcode:Number = tagcodelen >> 6;
var taglen:Number = tagcodelen & 0x3F;
trace("tag code = " + tagcode + "\tlen = " + taglen);
if (taglen >=63) {
taglen = compBytes.readUnsignedInt();
}
if(tagcode == 9) {
trace("found background color");
trace("color is: RED=" + compBytes.readUnsignedByte() +", GREEN = " + compBytes.readUnsignedByte() + ", BLUE = " + compBytes.readUnsignedByte());
break;
}
compBytes.readBytes(new ByteArray(), 0, taglen);
//break;
}
}
}
}
于 2009-11-16T09:51:58.940 に答える
-2
SWFファイルはJSを使用してWebページに渡す必要があります。
getURL( "javascript:setColour(" + DESIRED COLOR + ")");
もちろん、「setColour」関数は、実行したいことを実行する必要があります。
于 2009-11-16T08:48:47.510 に答える