我已经使用过LockBits和UnlockBits函数,并将Image的字节数组放入一维数组中。 (仅考虑黑白/二值化图像)
有什么方法可以将其带入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);
}
}
由于图像是二进制的,所以Byte数组的值只能是255和0。
[没有将整个图像提取到一维数组中,有什么方法/代码可以将像素逐行提取到2D数组中,我可以将其写入文本文件并稍后查看?
编程语言:C#
示例:(如果将值255替换为1)
结果输出:一维数组:(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
预期输出:2D数组:(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#中的代码帮助我吗?
这是一个简单的函数,它接受一个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;
}
我没有添加任何验证来确保输入数组可以被大小完全整除,如果需要,您需要添加它。
我确实添加了将数据写入文件的代码。
非常简单。
private int[][] conver1dTo2d(int[] arr, int w, int h){
int[][] answer = new int[h][w];
for(int i = 0 ; i<arr.length; i++){
answer[i/w][i%w] = arr[i];
}
return answer;
}
或
private int[][] conver1dTo2d(int[] arr, int rowSize){
int[][] answer = new int[arr.length/rowsize][rowSize];
for(int i = 0 ; i<arr.length; i++){
answer[i/rowSize][i%rowSize] = arr[i];
}
return answer;
}