![](/img/trans.png)
[英]Copying byte array with Marshal.Copy from IntPtr using C# doesn't work
[英]In C#, how do I write a array with a byte* pointer to a FileStream without copying it using Marshal?
我正在使用制造商生产的相机SDK,他们给了我一个名为Image
的类,其中一个名为data
byte*
data
指针指向图像数据的开头。 他们还给了我一个名为dataSize
的uint
,它对应于data
的长度。
现在,我想使用FileStream将其写入文件,但不幸的是,FileStream中唯一的写入函数是签名Write(Byte[], Int32, Int32)
。 当然,如果我尝试使用data
作为Write(...)
的参数,它告诉我我不能从byte*
转换为byte[]
。
因为在我的应用程序中,性能至关重要,我想避免使用Marshal.Copy(...)
将数据复制到byte[]
数组中,如本答案所示 。
我可以使用哪些其他选项来获取此byte*
指针并将其写入文件? 请注意,我的总体目标是拍摄这些每秒数千张的图像,并尽快将它们写入磁盘(即依次为SSD)。
看一下UnmanagedMemoryStream
类型:
Image cameraData = YourSDKFunction();
using (var camera = new UnmanagedMemoryStream(cameraData.data, (int64)cameraData.dataSize))
using (var outFile = new FileStream("outputFile.jpg"))
{
camera.CopyTo(outFile);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.