1

我正在寻找将像素数据从服务器传输到 android 程序。在服务器上,像素数据采用 RGBA 格式,每种颜色/透明度一个字节。不幸的是,在 android 上,相应的像素格式是 ARGB,这意味着 alpha 通道出现在颜色数据之前,而不是像服务器上那样在之后。我担心在服务器上将 RGBA 数据改组为 ARGB 格式会太慢,所以我希望找到另一种解决方法。顺便说一下,服务器是用python编写的。我正在使用此处介绍的函数捕获屏幕数据:Image.frombuffer with 16-bit image data。如果有一种方法可以使用此方法(或其他方法)以 ARGB 格式甚至 RGB_565 抓取屏幕截图,我也很想听听。

我想解决这个问题的一个技巧是在 canvas.drawbitmap(int[], ...) 上使用 isPreMultiplied 标志,然后只从服务器发送 RGB 字节。然后我可以将 RGB 位重新组合为 android 设备上的整数并将其发送到 drawbitmap,完全忽略 alpha 通道。

然而,这给我留下了另一个问题。整数由 4 个字节组成,我的 byte[] 数组(RGB 值)中有一个 3 个字节的序列。我正在使用这里提出的一些解决方案:byte array to Int Array在我传输 RGBA 数据时将我的 byte[] 转换为 int[]。但是现在它只是 3 字节序列,我不确定如何快速将其转换为整数。我希望接近实时的图像更新,所以我需要一种方法来快速做到这一点。有任何想法吗?

4

1 回答 1

1
int rgbInt = byteArray[0] << 16 + byteArray[1] << 8 + byteArray[2];    
// not sure these are in the correct order, you may have to swap the indexes around. 

您可能还需要包括

+ 0xFF << 24

将 alpha 值设置为不透明。

于 2013-09-27T19:22:30.803 回答