Как конвертировать буфер BGRA в формат буфера RGBA?

Как я могу конвертировать буфер BGRA в формат буфера RGBA в C ++

void ConvertBetweenBGRAandRGBA(unsigned char* input, int pixel_width,int pixel_hight,
unsigned char* output) {

for (int y = 0; y < pixel_hight; y++) {
for (int x = 0; x < pixel_width; x++) {
const unsigned char* pixel_in = &input[y * x * 4];

unsigned char* pixel_out = &output[y * x * 4];
pixel_out[0] = pixel_in[2];
pixel_out[1] = pixel_in[1];
pixel_out[2] = pixel_in[0];
pixel_out[3] = pixel_in[3];
}
}

но я не получаю цвет фона.

Пожалуйста, кто-нибудь поможет мне?

-2

Решение

Это не C #, поэтому, пожалуйста, пометьте его соответствующим образом.

Предполагая, что это растровые данные, во-первых, вам нужно выяснить шагать изображения. Шаг — это количество байтов, которое использует каждая строка пикселей. Это не всегда равно bytes_per_pixel * pixels_per_row, Обычно он выравнивается до четырех байтов, поэтому в этом случае (поскольку пиксели ARGB используют четыре байта на пиксель), все будет в порядке.

Во-вторых, ваша формула для получения адреса пикселя (x, y) неверна. Пиксели хранятся в главном порядке строк. Это означает, что, начиная со смещения 0 в пиксельном буфере, вы увидите одну полную строку данных пикселей; а затем еще один полный ряд; и так далее. Для каждой строки данных пикселей имеется полный набор байтов.

Вы мог сделай это:

const unsigned char* pixel_in = &input[((y * pixel_width) + x) * 4];

Но если ваш шаг действительно равен ширине изображения, вам не нужно каждый раз вычислять адрес, потому что пиксели будут сохраняться последовательно:

void ConvertBetweenBGRAandRGBA(unsigned char* input, int pixel_width,
int pixel_height, unsigned char* output)
{
int offset = 0;

for (int y = 0; y < pixel_height; y++) {
for (int x = 0; x < pixel_width; x++) {
output[offset] = input[offset + 2];
output[offset + 1] = input[offset + 1];
output[offset + 2] = input[offset];
output[offset + 3] = input[offset + 3];

offset += 4;
}
}
}

Если он по-прежнему не отображается правильно, подтвердите правильную упаковку пикселей. Это должен быть ARGB или BGRA; Я никогда не слышал о пикселях, упакованных как RGBA.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]