int yuvToB(int y, int u, int v) {
return (int) ((y & 0xFF) + 1.779 * ((u & 0xFF) - 128));
}
int alignIntToByte(int c) {
return c & 0xFF;
}
举个例子,对于4x2的图片,RGBA32
格式内容为:
R1 G1 B1 A1 R2 G2 B2 A2 R3 G3 B3 A3 R4 G4 B4 A4
R5 G5 B5 A5 R6 G6 B6 A6 R7 G7 B7 A7 R8 G8 B8 A8
那么若需要转化为BGR24
,内容将变成:
B1 G1 R1 B2 G2 R2 B3 G3 R3 B4 G4 R4
B5 G5 R5 B6 G6 R6 B7 G7 R7 B8 G8 R8
BGR24
内容为3个byte
一组,RGBA32
内容为4个byte
一组。因此,对于第一组RGBA32(R1 G1 B1 A1)
和第一组BGR24(B1 G1 R1)
,其对应关系为:
bgr24[0] = Rgba32[2];
bgr24[1] = Rgba32[1];
bgr24[2] = Rgba32[0];
对应的转换代码:
void rgba32ToBgr24(char *rgba32, char *bgr24, int width, int height) {
int groupNum = width * height;
int bgr24Index = 0;
int rgba32Index = 0;
for (int i = 0; i < groupNum; i++) {
*(bgr24 + bgr24Index) = *(rgba32 + rgba32Index + 2);
*(bgr24 + bgr24Index + 1) = *(rgba32 + rgba32Index + 1);
*(bgr24 + bgr24Index + 2) = *(rgba32 + rgba32Index);
bgr24Index += 3;
rgba32Index += 4;