1

こんにちは、質問を言い換えて迷惑かけて申し訳ありませんが、答えを見つけようとしています。

intRGB 値で構成された配列があります。そのint配列をバイト配列に分解する必要がありますが、BGR の順序にする必要があります。

RGB 値で構成される int の配列は、次のように作成されます。

pix[index++] = (255 << 24) | (red << 16) | blue;
4

5 に答える 5

4

C# コード


        // convert integer array representing [argb] values to byte array representing [bgr] values
        private byte[] convertArray(int[] array)
        {
            byte[] newarray = new byte[array.Length * 3];
for (int i = 0; i < array.Length; i++) {
newarray[i * 3] = (byte)array[i]; newarray[i * 3 + 1] = (byte)(array[i] >> 8); newarray[i * 3 + 2] = (byte)(array[i] >> 16);
} return newarray; }

于 2008-12-25T01:04:10.970 に答える
1

Linq の使用:

        pix.SelectMany(i => new byte[] { 
            (byte)(i >> 0),
            (byte)(i >> 8),
            (byte)(i >> 16),
        }).ToArray();

または

        return (from i in pix
                from x in new[] { 0, 8, 16 }
                select (byte)(i >> x)
               ).ToArray();
于 2008-12-25T04:31:46.853 に答える
1

バッファクラスを使用してみてください

byte[] bytes = new byte[ints.Length*4];
Buffer.BlockCopy(ints, 0, bytes, 0, ints.Length * 4);
于 2011-11-15T18:53:26.830 に答える
1
#define N something
unsigned char bytes[N*3];
unsigned int  ints[N];

for(int i=0; i<N; i++) {
    bytes[i*3]   = ints[i];       // Blue
    bytes[i*3+1] = ints[i] >> 8;  // Green
    bytes[i*3+2] = ints[i] >> 16; // Red
}
于 2008-12-25T00:27:38.250 に答える
0

r = (pix[index] >> 16) & 0xFF

残りは同様で、16 を 8 または 24 に変更するだけです。

于 2008-12-25T00:28:23.957 に答える