0

8ビット値(下記)を抽出する方法がありますが、出力の印象は次のようになります。

010 020 030 = Specific Colour
135 250 250 = Specific Colour

私が持っているメソッドは、配列内の8ビット値を返します-8ビットの3つのセットすべてが互いに対応して色を形成するため、メソッドは多次元配列内の8ビット値を返さないでください(上記のように)?

現在の方法:

 private static byte[] GetColorData(Bitmap bmp)
        {
            Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height);
            BitmapData bmpdata = bmp.LockBits(rect, ImageLockMode.ReadOnly, PixelFormat.Format24bppRgb);

            IntPtr ptr = bmpdata.Scan0;
            int bytes = bmpdata.Stride * bmp.Height;
            byte[] results = new byte[bytes];
            Marshal.Copy(ptr, results, 0, bytes);

            bmp.UnlockBits(bmpdata);
            return results;
        }

現在のメソッド出力:

100
101
000
255
250
4

2 に答える 2

1

ビットマップの色の値は、単なるバイトの配列です。グループ化する方法については、値の解釈次第です。コードは画像を明示的に24bppRGBに変換するため、グループ化を行うのはユーザーの責任です。

また、を返しますbyte[]。これは、定義上、1つの次元しかありません。3次元配列が必要な場合は、自分で1つ作成resultsし、新しい多次元配列に値を自分で追加する必要があります。

于 2012-10-30T13:57:47.153 に答える
0

要求された方法でピクセル データを読み取ると、要求されたデータがバイト配列として取得され、各バイト トリプレットが 1 ピクセルを定義します。

Tuple<byte,byte,byte>ピクセルごとにインスタンスを作成し、ピクセル レベルで値をグループ化し、 a を返してICollection<Tuple<byte,byte,byte>>、このグループ化された方法ですべてのピクセルを取得できます。

于 2012-10-30T14:00:41.990 に答える