actionscript-3 - AS3 将 ARGB 值的 ByteArray 转换为 RGB uint

标签 actionscript-3 flash bytearray bitmapdata argb

我有一个 C++ QT 应用程序,它通过 TCP 套接字发送 ARGB 值的字节数组。图像是 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

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

最佳答案

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

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

关于actionscript-3 - AS3 将 ARGB 值的 ByteArray 转换为 RGB uint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11593212/

相关文章:

php - 引用错误 : Error #1069:Property not found on String and there is no default value

java - 如何在 Java 中将表示整数的字符串转换为无符号字节数组?

java - 将 long 转换为字节数组并将其添加到另一个数组

flash - 如何在我的 Flash 应用程序中制作 cookie?

闪存 "Double Typing"问题

flash - 使用 renderMode=GPU 的 iPad AIR 应用程序的性能突然下降

java - 如何将字符转换为字节?

actionscript-3 - 与 Actionscript-3 相比,使用 Haxe 的优缺点是什么?

javascript - javascript 是使用自己的算法实现数学函数还是将它们外包给 cpu/处理器?

xml - 加载 XML 文件时从文本节点的内容中去除前导和尾随空格