как разложить массив целых чисел в байтовый массив (кодирование пикселей) - PullRequest
1 голос
/ 25 декабря 2008

Привет, извините за раздражение, перефразируя мой вопрос, но я как раз собираюсь найти свой ответ.

У меня есть массив int, состоящий из значений RGB, мне нужно разложить этот массив int в байтовый массив, но он должен быть в порядке BGR.

Массив int, состоящий из значений RGB, создается следующим образом:

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

Ответы [ 5 ]

4 голосов
/ 25 декабря 2008

C # код

<code>
        // convert integer array representing [argb] values to byte array representing [bgr] values
        private byte[] convertArray(int[] array)
        {
            byte[] newarray = new byte[array.Length * 3];<br>
            for (int i = 0; i < array.Length; i++)
            {<br>
                newarray[i * 3] = (byte)array[i];
                newarray[i * 3 + 1] = (byte)(array[i] >> 8);
                newarray[i * 3 + 2] = (byte)(array[i] >> 16);<br>
            }
            return newarray;
        }
1 голос
/ 15 ноября 2011

Попробуйте использовать класс буфера

    byte[] bytes = new byte[ints.Length*4];
    Buffer.BlockCopy(ints, 0, bytes, 0, ints.Length * 4);
1 голос
/ 25 декабря 2008

Использование 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();
1 голос
/ 25 декабря 2008
#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
}
0 голосов
/ 25 декабря 2008

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

остальное похоже, просто измените 16 на 8 или 24.

...