将内存指针转换为字节数组

时间:2013-11-21 07:26:46

标签: c# bitmap bytearray

我正在使用由Roman Ginzburg创建的优秀VLC包装器:nVLC

这部分代码返回一个位图对象。 在myh调用代码我然后将其转换为字节数组。 我有办法直接将内存指针转换为字节数组,并转换为位图对象。

这是他的代码:

    unsafe void OnpDisplay(void* opaque, void* picture)
    {
        lock (m_lock)
        {
            PixelData* px = (PixelData*)opaque;
            MemoryHeap.CopyMemory(m_pBuffer, px->pPixelData, px->size);

            m_frameRate++;
            if (m_callback != null)
            {
                using (Bitmap frame = GetBitmap())
                {
                    m_callback(frame);
                }
            }
        }
    }

    private Bitmap GetBitmap()
    {
        return new Bitmap(m_format.Width, m_format.Height, m_format.Pitch, m_format.PixelFormat, new IntPtr(m_pBuffer));
    }

我想要的是另一个功能:

private byte[] GetBytes()
{
 //not sure what to put here...
}

我正在寻找我的类型,但仍然找不到任何东西,即使有可能这样做......

由于

1 个答案:

答案 0 :(得分:1)

使用Marshal.Copy。像这样:

private byte[] GetBytes() {
    byte[] bytes = new byte[size];
    Marshal.Copy(m_pBuffer, bytes, 0, size);
    return bytes;
}

我不太确定你在哪里存储缓冲区的大小,但你必须知道。

一边说。为什么要在GetBitmap而不是普通的m_pBuffer中编写新的IntPtr(m_pBuffer)?

我也想知道为什么你觉得这里需要使用不安全的代码。真的需要吗?