我正在使用制造商提供的相机SDK,他们给了我一个名为Image
的类,该类的指针为data
的类型为byte*
的指针指向图像数据的开头。他们还给我一个名为uint
的dataSize
,它与data
的长度相对应。
现在,我想使用FileStream将其写入文件,但是不幸的是FileStream中唯一的写入功能是签名Write(Byte[], Int32, Int32)
。自然地,如果我尝试将data
用作Write(...)
的参数,它告诉我无法从byte*
转换为byte[]
。
因为在我的应用程序中,性能至关重要,所以我想避免像本answer中所建议的那样,使用byte[]
将数据复制到Marshal.Copy(...)
数组中。
我还有什么其他选择可以使用此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);
}