首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用IntPtr将byte[]复制到RGBA byte[]

用IntPtr将byte[]复制到RGBA byte[]
EN

Stack Overflow用户
提问于 2014-12-09 20:14:04
回答 1查看 386关注 0票数 1

我目前正在使用byte[]从BGRA IntPtr缓冲区复制Marshal.Copy,如下所示:

代码语言:javascript
复制
    private static byte[] getWebViewScreenshotAsBytes(ref WebView myWebView)
    {
        int colorLength = myWebView.Width * myWebView.Height;
        BitmapSurface bmpSurface = (BitmapSurface)myWebView.Surface;

        byte[] bgra = new byte[colorLength * 4];
        Marshal.Copy(bmpSurface.Buffer, bgra, 0, colorLength * 4);

        byte[] rgba = new byte[colorLength * 4];
        for(int i = 0; i < bgra.Length; i += 4)
        {
            rgba[i] = bgra[i + 2];
            rgba[i + 1] = bgra[i + 1];
            rgba[i + 2] = bgra[i];
            rgba[i + 3] = bgra[i + 3];
        }

        return rgba;
    }

如您所见,然后我将遍历byte[] 4,以便将BGRA格式更改为RGBA格式。

我的问题是:在将字节从IntPtr复制到带管理的byte[]中时,是否有方法将字节从BGRA切换到正确的RGBA位置,从而节省了循环?

如果需要任何上下文,我将从Awesomium WebView曲面(BGRA)获得缓冲图像,并将其用于SFML.NET纹理(RGBA)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-09 20:29:56

BitmapSurface类有一个接受bool convertToRGBA参数的CopyTo方法:

代码语言:javascript
复制
public void CopyTo(
    IntPtr destBuffer,
    int destRowSpan,
    int destDepth,
    bool convertToRGBA,
    bool flipY
)

请参阅API文档

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27387971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档