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

时间:2014-04-06 00:12:18

标签: .net image f#

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

现在,我不确定如何将此字节[,,]转换为图像。我看过http://msdn.microsoft.com/en-us/library/system.drawing.bitmap.aspx。如果我使用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

1 个答案:

答案 0 :(得分:1)

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

回顾previous question,如果直接操纵该问题的values数组而不是构建中间Array3D,则可能会更容易。