2010-07-19 2 views
10

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

+2

Какая платформа? – bshields

+13

Быть wuss кажется правильным. Не изобретать велосипед. – Tom

+0

http://stackoverflow.com/a/28633405/184572 –

ответ

23

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

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; 
+0

Позор у них нет 64-битного порта. По крайней мере, они говорят об этом в своем FAQ. –

+0

Что вы имеете в виду? Эта библиотека является только заголовочным файлом и компилируется в 64-битном режиме. –

11

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); 
+0

Оболочка C++ кажется немного глючной, по крайней мере, с g ++. Связывание библиотеки проблематично, хотя версия c отлично работает. – jiggunjer

1

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

+0

OP даже не подразумевает, что C и C++ являются «языком». OP ищет решение, которое является либо C, либо C++. –

+0

@gbrandt, обновил мой ответ, чтобы отразить язык реализации SDL. –

3

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

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

1

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

4

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

+1

'boost :: gil' сам по себе не загружает графические форматы. Он обеспечивает равномерный интерфейс для выполнения пиксельных алгоритмов. Помощники загрузчика изображений в 'boost :: gil' требуют наличия соответствующих библиотек (например,' libtiff', 'libpng' и т. Д.) – kizzx2

+1

, что верно и для CImg, оно поддерживает несколько форматов изначально, остальное необходимо 3 партийных библиотек. – jiggunjer

0

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

Смежные вопросы