2013-06-30 18 views
2

我已经使用LockBits和UnlockBits函数,并将图像的字节数组转换为一维数组。 (只考虑黑白/二值化图像)如何将1D字节数组转换为包含位图的2D字节数组?

有什么方法将它提交给二维数组(大小图像的高度和宽度)?所以我可以将数组写入“.txt”文件并查看它?

我已经使用采取图像分成一维数组的代码如下:

Public void function(Bitmap image){ 
{ 
byte[] arr1D; 
byte[] arr2D; 

BitmapData data = image.LockBits(new Rectangle(0, 0, img_w, img_h), ImageLockMode.ReadOnly, image.PixelFormat); 
      try 
      { 
       IntPtr ptr = data.Scan0; 
       int bytes = Math.Abs(data.Stride) * image.Height; 
       byte[] rgbValues = new byte[bytes]; 
       arr1D = rgbValues; 
       Marshal.Copy(ptr, rgbValues, 0, bytes); 
      } 
      finally 
      { 
       image.UnlockBits(data); 
      } 
} 

由于图像是二进制的,该字节数组的值是从255只和0

除了将整个图像提取到一维数组之外,是否有任何方法/代码可以将像素逐行地提取到二维数组,在哪里可以将它写入文本文件并稍后再看?

编程语言:C#

例如:(如果该值255被替换为1)

结果输出: 1D阵列:(6像素X 6像素图像)

0 0 1 1 0 0 0 0 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 0 1 1 0 0 

预计产量: 二维数组:(6像素X 6像素图像)

0 0 1 1 0 0 
0 0 1 1 0 0 
1 1 1 1 1 1 
1 1 1 1 1 1 
0 0 1 1 0 0 
0 0 1 1 0 0 

是否有人可以帮助我在C#中它的代码?

+0

您可以将一维数组写入N维文件;这只是查看它们的问题。在第一行写入W条目,然后添加一个换行符,然后在下一行写入W个条目,依此类推,直到写入H行。写入条目的总数是W * H(或一维数组的大小)。 – user2246674

+0

@ user2246674:请问您能为我输入代码段吗? – hirosht

回答

5

这是一个简单的函数,它需要一个1d的int数组,并且每行的大小都希望数据分裂并返回一个2d数组。

public int[,] ConvertArray(int[] Input, int size) 
{ 
    int[,] Output = new int[(int)(Input.Length/size),size]; 
    System.IO.StreamWriter sw = new System.IO.StreamWriter(@"C:\OutFile.txt"); 
    for (int i = 0; i < Input.Length; i += size) 
    { 
     for (int j = 0; j < size; j++) 
     { 
      Output[(int)(i/size), j] = Input[i + j]; 
      sw.Write(Input[i + j]); 
     } 
     sw.WriteLine(""); 
    } 
    sw.Close(); 
    return Output; 
} 

我没有添加任何验证,以确保输入数组是可以整除的大小,如果有必要,您将需要添加。

我确实添加了代码来将数据写入文件。

+0

谢谢:)我会试试这个 – hirosht

相关问题