Hi sorry for being annoying by rephrasing my question but I am just on the point of discovering my answer.
I have an array of int
composed of RGB values, I need to decompose that int
array into a byte array, but it should be in BGR order.
The array of int composed of RGB values is being created like so:
pix[index++] = (255 << 24) | (red << 16) | blue;
From stackoverflow
-
#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 }
Jay Bazuzi : Wrong langauge; magic numbers are evilCan Berk Güder : The question doesn't state a specific language, and I only saw the c# tag now. -
r = (pix[index] >> 16) & 0xFF
the rest is similar, just change 16 to 8 or 24.
Can Berk Güder : & 0xFF is not really necessary if r is a char. -
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];
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; } -
Using Linq:
pix.SelectMany(i => new byte[] { (byte)(i >> 0), (byte)(i >> 8), (byte)(i >> 16), }).ToArray();
Or
return (from i in pix from x in new[] { 0, 8, 16 } select (byte)(i >> x) ).ToArray();
0 comments:
Post a Comment