2

私はすでに LockBits および UnlockBits 関数を使用しており、Image のバイト配列を 1D 配列に取り込んでいます。(白黒/二値化画像のみを考慮)

それを2D配列(サイズの画像の高さと幅)にする方法はありますか? 配列を「.txt」ファイルに書き込んで表示できますか?

画像を1D配列に取り込むために使用したコードは次のとおりです。

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 のみです。

画像全体を 1D 配列に抽出する代わりに、行ごとにピクセルを 2D 配列に抽出できるメソッド/コードはありますか?テキスト ファイルに書き込んで後で確認できますか?

プログラミング言語 : C#

例: (値 255 が 1 に置き換えられた場合)

結果出力: 1D 配列: (6px X 6px 画像)

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 配列: (6px X 6px 画像)

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#でのコードを手伝ってくれませんか?

4

2 に答える 2

4

これは、1 次元の int 配列と、データを分割する各行のサイズを取り、2 次元の配列を返す単純な関数です。

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;
}

入力配列がサイズで正確に割り切れることを確認するための検証を追加しませんでした。必要に応じて、それを追加する必要があります。

データをファイルに書き込むコードを追加しました。

于 2013-06-30T09:10:03.597 に答える