小编jen*_*ild的帖子

将RAW字节数据转换为位图

我正在使用ADB截取android设备的屏幕截图,并将屏幕截图作为原始字节数据接收。

我知道通过的原始字节数据的格式为rgba

红色为偏移量0,绿色为偏移量8,蓝色为偏移量16,Alpha偏移量为24,每个值为1个字节。这构成了整个字节数组。

我正在尝试将此字节数组转换为C#中的位图,并且在大多数情况下都可以正常工作,除了看起来带有“蓝色调”的事实外,图像在各个方面看起来都是正确的-着色已关闭。

以下是我用来转换原始字节数据的代码:

int WriteBitmapFile(string filename, int width, int height, byte[] imageData)
    {
        using (var stream = new MemoryStream(imageData))
        using (var bmp = new Bitmap(width, height, PixelFormat.Format32bppArgb))
        {
            BitmapData bmpData = bmp.LockBits(new Rectangle(0, 0,
                                                            bmp.Width,
                                                            bmp.Height),
                                              ImageLockMode.WriteOnly,
                                              bmp.PixelFormat);
            IntPtr pNative = bmpData.Scan0;

            Marshal.Copy(imageData, 0, pNative, imageData.Length);

            bmp.UnlockBits(bmpData);

            bmp.Save(filename);
        }

        return 1;
    }
Run Code Online (Sandbox Code Playgroud)

我在这篇文章中读到,这可能与实际rgba值的字节顺序有关。如您在上面的代码中看到的,我尝试将bmpData.Scan0强制转换为int *,但它仍然带有蓝色调。

我为现在可以做的事情以正确的颜色使图像动摇不已。我假设它读取的是红色的蓝色和蓝色的红色,反之亦然。

我以为我可以操纵原始字节数据,以便在将其转换为位图时按正确的字节顺序进行操作,但是我不确定该如何去做。

有什么建议么?

c# android bitmap image-processing

1
推荐指数
1
解决办法
7006
查看次数

标签 统计

android ×1

bitmap ×1

c# ×1

image-processing ×1