2009-11-16 24 views
1

我正在使用URLLoader將swf文件加載到我的主應用程序中,我想獲取加載的swf文件的背景顏色。 (我聽說有一個解決方案將讀取加載的swf的字節代碼)如何獲取加載的swf文件的背景顏色?

+0

你通過'URLLoader'或'Loader'加載它?我不知道如何去做 - 等待答案。 – Amarghosh 2009-11-16 09:09:57

回答

5

是的,您需要查看二進制swf數據。 Here是swf格式的簡要說明。 this是關於不同種類的標籤的一點細節。您的要求是找出SetBackgroundColor標記(標記類型= 9),它通常是swf的第一個或第二個標記。
swf文件中的字節遵循小端順序,所以在閱讀數據時需要小心。大多數情況下,它們將從第9個字節開始(包括第9個)被壓縮(前三個字節將是「CWS」),所有數據在處理之前需要解壓縮(ByteArray.decompress)。
SomeExample代碼:)

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; 
    } 
} 

}}

+0

無法迴應的例子!謝謝。 – Radu 2009-11-16 12:42:34

-2

您的SWF文件必須將它傳遞給帶有JS的網頁。

getURL(「javascript:setColour(」+ DESIRED COLOR +「)」);

「setColour」函數當然必須做你想做的事情。

+0

OP想獲取顏色,而不是設置它。即使問題是設置顏色,你會怎麼做通過javascript? SWF被加載到另一個SWF,而不是直接加載到網頁上。 – Amarghosh 2009-11-16 09:08:51

相關問題