.net 如何将字节数组转换为图像?

.net 如何将字节数组转换为图像?,.net,image,f#,.net,Image,F#,我有一个3D字节[,]数组(I,x,y),里面有I=B/G/R和x=x坐标和y=y坐标。例如,i=2x=100y=200,像素的红色分量(100200)或i=0x100y=200,像素的蓝色分量(100200)是的,我知道RGB的顺序相反 现在,我不知道如何将这个字节[,,]转换为图像。我已经看过了。如果我使用SetPixel(),它会很慢吗?如何避免使用SetPixel()?我尝试使用BitLock方法,避免使用GetPixel()或SetPixel(),还有什么其他方法可以做同样的事情?但是

我有一个3D字节[,]数组(I,x,y),里面有I=B/G/Rx=x坐标y=y坐标。例如,i=2x=100y=200,像素的红色分量(100200)或i=0x100y=200,像素的蓝色分量(100200)是的,我知道RGB的顺序相反

现在,我不知道如何将这个字节[,,]转换为图像。我已经看过了。如果我使用SetPixel(),它会很慢吗?如何避免使用SetPixel()?我尝试使用BitLock方法,避免使用GetPixel()或SetPixel(),还有什么其他方法可以做同样的事情?但是更快

let greyscale (byteArray: byte[,,]) =
 let file = new Bitmap("cat.jpg")
 for j = 0 to file.Height - 1 do
  for i = 0 to file.Width - 1 do
   let p = Color.FromArgb(int byteArray.[2, i, j], int byteArray.[1, i, j], int byteArray.[0, i, j])
   file.SetPixel(i, j, Color.FromArgb(greyValue p, greyValue p, greyValue p)) //greyValue returns average of RGB
 file.Save("cat.jpg")

greyscale thisis3darray

您需要位图构造函数
(Int32、Int32、Int32、PixelFormat、IntPtr)
(文档)。您必须将
byteArray
转换为匹配格式


回过头来看,如果您直接操作该问题的
数组,而不是构建中间
数组3d
,可能会更容易

因为你在这里问了很多问题:stackoverflow不是我们来写你的全部问题的。请张贴具体的例子,说明你的困境。例如,使用setpixel发布一个(可能很慢的)示例会很好。此外,这个问题似乎是过早的优化。因此,您有一个使用setpixel的方法。你有没有计时来显示它有多慢?(以及你是否真的需要它更快)我自己的setpixel只是在3d数组中更改字节数,在返回图像时遇到问题,已经4天了,哈哈。还有一件事——你还没有投票。很多知识渊博的人都会抽出时间来帮助你。在您收到的答案旁边的圆圈上方/下方有上下箭头-使用它们。好的,我已经完成了所有问题,谢谢提醒!在解锁位之前操纵数组的值?然后丢弃3d阵列的副本?我已经这样做了3-4天了,但我会继续这样做。在前面的问题中,构造了一个名为
values
的字节数组。然后从中生成Array3D。如果您坚持使用
数组,我可以想象您可以使用引用的构造函数返回图像。(一旦有了
,就可以安全解锁。)