我正在使用由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...
}
我正在寻找我的类型,但仍然找不到任何东西,即使有可能这样做......
由于
答案 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)?
我也想知道为什么你觉得这里需要使用不安全的代码。真的需要吗?