Я пытаюсь создать пример минимального использования для https://github.com/ginsweater/gif-h.
Но, начиная с vector<uint8_t> размера imageWidth*imageHeight, второй вызов GifWriteFrame вызывает исключение чтения местоположения нарушения доступа
Моя попытка:
#include <gif.h>
#include "BOBImageConversion.h"
int main(void)
{
// USAGE:
// Create a GifWriter struct. Pass it to GifBegin() to initialize and write the header.
// Pass subsequent frames to GifWriteFrame().
// Finally, call GifEnd() to close the file handle and free memory.
int delay = 100;
auto i1 = BOBImageIO::BOBLoadImage("Camera7.png");
auto i2 = BOBImageIO::BOBLoadImage("Camera18.png");
vector<uint8_t> vi1 = BOBImageConversion::ARGB2RGBAuint8(i1);
vector<uint8_t> vi2 = BOBImageConversion::ARGB2RGBAuint8(i2);
cout << (vi1.size() == i1.Width()*i1.Height()) << endl; // true
cout << (vi2.size() == i2.Width()*i2.Height()) << endl; // true
auto fileName = "gif.gif";
GifWriter g;
GifBegin(&g, fileName, i1.Width(), i1.Height(), delay);
GifWriteFrame(&g, vi1.data(), i1.Width(), i1.Height(), delay);
GifWriteFrame(&g, vi2.data(), i2.Width(), i2.Height(), delay); // Exception thrown: Access violation reading location
GifEnd(&g);
return 0;
}
Для вышеуказанного пункта опубликованный код является минимальным примером. Что случилось?
это была ошибка загрузки изображения, я забыл каналы





Это работает
#include <vector>
#include <cstdint>
#include <gif.h>
int main()
{
int width = 100;
int height = 200;
std::vector<uint8_t> vi1(width * height * 4, 0);
std::vector<uint8_t> vi2(width * height * 4, 255);
auto fileName = "bwgif.gif";
int delay = 100;
GifWriter g;
GifBegin(&g, fileName, width, height, delay);
GifWriteFrame(&g, vi1.data(), width, height, delay);
GifWriteFrame(&g, vi2.data(), width, height, delay);
GifEnd(&g);
return 0;
}
В нем отсутствует включение для вектора, а векторы должны иметь префикс с пространством имен std. uint8_t вытягивается gif.h, но полагаться на это не стоит. Также список основных аргументов должен быть пустым в C++, как в 'int main()'. 'int main(void)' - это синтаксис C.
txs @MiroslavFranc ! добавлен
gинициализируется размеромi1. Можетi2имеет другой размер?