C++ gif кодировщик с хорошим качеством!
Используйте алгоритм квантизации Neural-Net от Энтони Деккера для генерации цветовой карты.
Для кодирования gif используйте giflib.
В демонстрационном коде для загрузки изображений используйте stb_image.
Просто скопируйте каталог gif в свой проект и включите GifEncoder.h
, это всё.
#include "GifEncoder.h"
int main() {
// Предположим, что у вас есть три кадра для кодирования
const int w = 40;
const int h = 40;
uint32_t frame0[w * h];
uint32_t frame1[w * h];
uint32_t frame2[w * h];
for (int i = 0; i < w * h; ++i) {
frame0[i] = 0xFF0000FF; // красный
frame1[i] = 0xFF00FF00; // зелёный
frame2[i] = 0xFFFF0000; // синий
}
int quality = 10;
bool useGlobalColorMap = true;
int loop = 0;
int preAllocSize = useGlobalColorMap ? w * h * 3 * 3 : w * h * 3;
int delay = 20;
GifEncoder gifEncoder;
if (!gifEncoder.open("test.gif", w, h, quality, useGlobalColorMap, loop, preAllocSize)) {
fprintf(stderr, "Error open gif file\n");
return 1;
}
gifEncoder.push(GifEncoder::PIXEL_FORMAT_RGBA, (uint8_t *) frame0, w, h, delay);
gifEncoder.push(GifEncoder::PIXEL_FORMAT_RGBA, (uint8_t *) frame1, w, h, delay);
gifEncoder.push(GifEncoder::PIXEL_FORMAT_RGBA, (uint8_t *) frame2, w, h, delay);
if (!gifEncoder.close()) {
fprintf(stderr, "Error close gif file\n");
return 1;
}
}
Более сложный демонстрационный код находится в demo.cpp
.
Используйте cmake для сборки demo.
cmake -DCMAKE_BUILD_TYPE=Release -B build .
cmake --build build -- all
./build/egif_demo
Откройте командную строку Visual Studio и выполните следующие команды:
cmake -DCMAKE_BUILD_TYPE=Release -G "NMake Makefiles" -B build .
cmake --build build -- all
.\build\egif_demo.exe
Соберите самостоятельно.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )