2012-07-21 48 views
2

我有一個C++ QT應用程序通過TCP套接字發送ARGB值的ByteArray。圖像是100 x 100.問題是,當我讀了ByteArray我似乎無法讓圖像顯示正確。我已經嘗試了很多不同的方法,這裏是AS3代碼,這是我最接近的。AS3將ARGB值的ByteArray轉換爲RGB uint

bitmapData.lock(); 
for(var x = 0;x<100; x++){ 
    for(var y = 0;y<100; y++){ 
    alphaValue = byteArray.readUnsignedByte(); 
    redValue = byteArray.readUnsignedByte(); 
    greenValue = byteArray.readUnsignedByte(); 
    blueValue = byteArray.readUnsignedByte(); 
    color = redValue << 16 | greenValue << 8 | blueValue; 
    bitmapData.setPixel(y,x,color); 
    } 
} 
bitmapData.unlock(); 

我現在只是沒有使用alpha值,因爲我不知道該如何處理它。 Qt說:「圖像使用32位RGB格式(0xffRRGGBB)存儲。」我也嘗試過使用readUnsignedInt(),但那也不起作用。

這是我想要發送的內容以及屏幕上顯示的內容。

發送:enter image description here收到在Flash enter image description here

已經很接近了,但不是恰到好處。有誰知道我可能做錯了什麼?

+0

看起來像頻道是混亂的。 – dda 2012-07-21 15:03:00

回答

3

更簡單的方法是使用readUnsignedInt而不是多次調用readByte。然後用bitmap.setPixel32代替setPixel。這樣你就不必解構和重構價值。

您可能還必須根據編碼方式來切換字節序(例如byteArray.endian = Endian.LITTLE_ENDIAN)。我只是不會記得它是如何繞過它的,所以如果它第一次不起作用,你可以嘗試。

+0

我曾嘗試使用setPixel32的readUnsignedInt,並且遇到類似的問題。雖然我還沒有嘗試過改爲LITTLE_ENDIAN,但我會盡力回覆你。謝謝。 – Ben 2012-07-21 15:21:25

+0

byteArray.endian = Endian.LITTLE_ENDIAN;工作完美無法說幾個小時後嘗試各種各樣的感覺。關於文檔中endian的東西沒有太多的信息,我現在已經做了一些閱讀和理解。謝謝。 – Ben 2012-07-21 16:23:12