我试图从剪贴板中获取设备无关位图.我很清楚这可以通过.NET Framework中内置的Clipboard.GetData函数来完成,但由于它非常错误(如Web上的许多地方所记录的),我只想使用API.
我写了以下代码,它有效.
//i can correctly cast this to a MemoryStream
MemoryStream ms = Clipboard.GetData("DeviceIndependentBitmap") as MemoryStream;
Run Code Online (Sandbox Code Playgroud)
但我想将它与API一起使用,它只返回一个指向流的指针(IntPtr).我看了一下UnmanagedMemoryStream但是没有理解如何正确地将其转换IntPtr为.
这是我的API代码(使用GetClipboardData API,其中CF_DIB格式设置为其参数).
IntPtr p = GetClipboardData(8);
//what do I do from here to get a MemoryStream from this pointer?
Run Code Online (Sandbox Code Playgroud)
我有点困惑.我自己已经研究过了,但却找不到有用的东西.
正如你所说,你可以使用UnmanagedMemoryStream(byte* pointer, long length)和使用它,你应该有一个指针和字节的长度.因此,您可以使用IntPtr.ToPointer()方法来获取指针,但您应该知道内存内容的长度.
UnmanagedMemoryStream unmanagedmemstream = UnmanagedMemoryStream(p.ToPointer(), 100);
Run Code Online (Sandbox Code Playgroud)
还有另一种方法来检索字节数组,但在这里你应该知道你想要的内存字节的长度,它是Marshal.Copy(IntPtr source, byte[] destination, int startIndex,int length):
byte[] buffer = new byte[100];
Marshal.Copy(p , buffer, 0, buffer.Lenght);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5635 次 |
| 最近记录: |