3

我有一个 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(),但这也不起作用。

这是我要发送的内容以及我在屏幕上看到的内容。

发送 : 在此处输入图像描述Flash 收到在此处输入图像描述

它很接近,但不完全正确。有谁知道我可能做错了什么?

4

1 回答 1

4

更容易使用readUnsignedInt而不是多次调用readByte. 然后使用bitmap.setPixel32而不是setPixel. 这样您就不必解构和重建这些值。

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

于 2012-07-21T15:10:40.350 回答