Загрузка изображения C/С++

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

Ответ 1

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

CImg<unsigned char> src("image.jpg");
int width = src.width();
int height = src.height();
unsigned char* ptr = src.data(10,10); // get pointer to pixel @ 10,10
unsigned char pixel = *ptr;

Ответ 2

FreeImage - хорошая библиотека с открытым исходным кодом

Вот пример кода, данные доступны с помощью "out.data()"

FREE_IMAGE_FORMAT format = FreeImage_GetFileTypeU(filename.c_str());
if (format == FIF_UNKNOWN)      format = FreeImage_GetFIFFromFilenameU(filename.c_str());
if (format == FIF_UNKNOWN)      throw(std::runtime_error("File format not supported"));

FIBITMAP* bitmap = FreeImage_LoadU(format, filename.c_str());
FIBITMAP* bitmap2 = FreeImage_ConvertTo32Bits(bitmap);
FreeImage_Unload(bitmap);

std::vector<char> out(FreeImage_GetWidth(bitmap2) * FreeImage_GetHeight(bitmap2) * 4);
FreeImage_ConvertToRawBits((BYTE*)out.data(), bitmap2, FreeImage_GetWidth(bitmap2) * 4, 32, FI_RGBA_RED_MASK, FI_RGBA_GREEN_MASK, FI_RGBA_BLUE_MASK, true);

FreeImage_Unload(bitmap2);

Ответ 3

Существует Boost GIL, который был первоначально разработан Adobe. Это может быть не самый интуитивный, но это, безусловно, одна из самых полных и мощных библиотек.

Ответ 4

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

Одна вещь о wuss. Хотя было бы неплохо настроить рабочий сторонний код, который был хорошо протестирован и сэкономит ваше время, что-то, что нужно сказать об обучении работе с изображениями и о том, почему оно работает так, как оно есть. Если вы действительно хотите что-то добиться, я считаю, что вам нужно научиться делать это с нуля. Даже если вы в конечном итоге используете сторонний код.

Ответ 5

Вы можете посмотреть SDL_Image, подпроект Простой уровень DirectMedia. Он служит простой абстракцией для загрузки нескольких различных форматов изображений. SDL написан на C, но прост в использовании с кодом C или С++.

Ответ 6

Еще одна возможность (прежде всего, если не исключительно для Windows) - CXImage. Его очевидное преимущество перед многими другими - поддержка многих форматов необработанных камер, в случае, если это имеет для вас значение.

Ответ 7

OpenImageIO поддерживает множество различных форматов файлов среди них: TIFF, JPEG/JFIF, OpenEXR, PNG, HDR/RGBE, ICO, BMP, Targa, JPEG-2000, RMan Zfile, FITS, DDS, Softimage PIC, PNM, DPX, Cineon, IFF, Field3D, Ptex, Photoshop PSD, Wavefront RLA, SGI, WebP и GIF