【问题标题】:AS3 convert ByteArray of ARGB values to RGB uintAS3 将 ARGB 值的 ByteArray 转换为 RGB uint
【发布时间】:2012-07-20 13:09:49
【问题描述】:

我有一个 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 中收到

它很接近,但不是恰到好处。有谁知道我可能做错了什么?

【问题讨论】:

  • 频道好像乱码了。

标签: actionscript-3 flash bytearray bitmapdata argb


【解决方案1】:

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

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

【讨论】:

  • 我试过 readUnsignedInt 和 setPixel32 并且有类似的问题。不过,我还没有尝试更改为 LITTLE_ENDIAN,我会尝试并回复您。谢谢。
  • byteArray.endian = Endian.LITTLE_ENDIAN;完美地工作了好几个小时后,不能说感觉有多好。文档中没有太多关于字节序的信息,我已经阅读了一些内容,现在对它有了更多的了解。谢谢。
猜你喜欢
  • 2011-07-27
  • 2017-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-22
相关资源
最近更新 更多