Сшивание изображений stb

Я пишу простую программу, чтобы связать кучу отдельных файлов изображений в одну карту для анимации и доп. Однако у меня проблема.

Насколько мне известно:

unsigned char* image = stbi_load(wholefoldername.c_str(),&width,&height,&channels,4);

Загружает изображение в массив следующим образом: [r, g, b, a, r, g, b, a, …]

Поэтому, если я загрузил, например … 25 изображений размером 120 * 120, то попытался поместить их в сетку 5х5.

Я мог бы тогда сделать что-то вроде:

int imageheight = images[0].height;
int imagewidth = images[0].width;
int images_tall = 5;
int images_wide = 5;
int channels = images[0].channels;
int totalwidth = imagewidth * images_wide;
int totalheight = imageheight * images_tall;

unsigned char *image2 = new unsigned char[totalwidth * totalheight * channels]; //(w * imagew * height * imageh) * channels
int imageindex = 0;
for(int imgcol = 0; imgcol < images_tall; imgcol++) //Image columns 0-5
for (int row =0; row <  imagewidth; row++) //Row0 - 120;
for (int img = 0; img < images_wide; img++) //Image Rows 0-5
for (int col = 0; col < imagewidth; col++) //Col 0-120
for (int channel = 0; channel < channels; channel++) //Channel 0-4
{
image2[imageindex++] = images[(imgcol * images_wide) + img].image[(row * imagewidth) + col];
}

Проблема в том, что когда я пытаюсь сохранить изображение с помощью stb:

stbi_write_png("svg4.png", totalwidth, totalheight, channels, image2, channels * totalwidth);

Если я сохраню его как один канал, он получится правильно:

введите описание изображения здесь

Но если я попытаюсь сохранить больше, чем 1 канал:

введите описание изображения здесь

Теперь это также предполагает, что, когда я преформ:

stbi_load(wholefoldername.c_str(),&width,&height,&channels,targchannel);

устанавливается значение «targchannel» для количества каналов, которые я хочу.

Где я ошибся в цикле? Кажется правильным для меня.

0

Решение

Задача ещё не решена.

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

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

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