2014-01-09 59 views
0

對於我的項目,我想查看在C#中捕獲的實時攝像頭源,並將其轉換爲as3 Flash應用程序在套接字上。如何從as3(flash)中的C#方法獲取圖像?

我有一個c#位圖圖片,我是通過套接字發送
現在我想要在as3 flash應用程序中顯示此位圖圖像。

+0

那麼你嘗試過什麼,什麼不工作該解決方案? –

+0

你卡在哪一步? 1.創建一個新套接字並連接到C#主機。 2.傳輸二進制數據。 3.將數據轉換爲位圖。 4.顯示位圖。 – zehelvion

+0

嗨,我能夠在C#中創建套接字。然後我已經將圖像轉換爲Byte數組,然後通過套接字發送。我無法在as3中收到它。 –

回答

0

最後我能弄明白。

此代碼捕捉來自c#的在線攝像頭源並將其發送到AS3(Flash)應用程序。

我從C#發送圖像:

using (MemoryStream ms = new MemoryStream()) 
       { 
        Bitmap t = image.Clone(r, PixelFormat.Format32bppArgb); 
        t.Save(ms, ImageFormat.Jpeg); 
        byte[] imageBuffer = ms.ToArray(); 
        byte[] filesize = BitConverter.GetBytes(imageBuffer.Length); 
        byte[] msg = new byte[filesize.Length + imageBuffer.Length]; 
        filesize.CopyTo(msg, 0); 
        imageBuffer.CopyTo(msg, 4); 
        netstream.Write(msg, 0, msg.Length); 
        t.Dispose(); 

       } 

而在AS3端IM接收它:

socket.endian = Endian.LITTLE_ENDIAN; 
b.endian = Endian.LITTLE_ENDIAN;// Changing it to little endian worked. 
socket = new Socket();   
socket.addEventListener(ProgressEvent.SOCKET_DATA, onResponse); 
socket.connect("127.0.0.1", 12345); 

private function onResponse(e:ProgressEvent):void 
{ 
...... 
socket.readBytes(b,0,4); 
b.position = 0; 
filesize = b.readInt(); 
b.clear(); 
socket.readBytes(b,0,socket.bytesAvailable); 
b.position = 0;   
l = new Loader(); 
l.loadBytes(b); 
l.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded); 
} 

private function loaded(e:Event):void 
{ 
    var bitmap:Bitmap = e.target.content; 
    while(this.numChildren > 0) 
    { 
     this.removeChildAt(0); 
    }   
    addChild(bitmap); 
    // remove listener 
    e.target.removeEventListener(Event.COMPLETE, loaded); 
} 
+0

你得到多少fps?我會建議在Flash中只使用一個位圖實例並更新其位圖數據以避免從顯示堆棧中添加和移除 – paranoio