AS3将ARGB值的ByteArray转换为RGB uint

时间:2012-07-21 14:58:43

标签: actionscript-3 flash bytearray bitmapdata argb

我有一个C ++ QT应用程序,它通过TCP套接字发送ARGB值的ByteArray。图像是100 x 100.问题是,当我读取ByteArray时,我似乎无法使图像显示正确。我已经尝试了很多不同的方法,这里的AS3代码让我最接近。

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

中收到

它很接近,但不仅仅是正确的。有没有人知道我可能做错了什么?

1 个答案:

答案 0 :(得分:4)

使用readUnsignedInt而不是多次调用readByte会更容易。然后使用bitmap.setPixel32代替setPixel。这样你就不必解构和重构价值观。

您可能还必须根据其编码方式切换字节序(例如byteArray.endian = Endian.LITTLE_ENDIAN)。我只是记不起它的副作用,所以你可以尝试一下,如果它不能第一次工作。