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