我正在使用制造商提供的相机SDK,他们给了我一个名为Image的类,该类的指针为data的类型为byte*的指针指向图像数据的开头。他们还给我一个名为uintdataSize,它与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);
}

09-20 16:52