Я пишу простую программу, чтобы связать кучу отдельных файлов изображений в одну карту для анимации и доп. Однако у меня проблема.
Насколько мне известно:
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» для количества каналов, которые я хочу.
Где я ошибся в цикле? Кажется правильным для меня.
Задача ещё не решена.
Других решений пока нет …