tags:

views:

136

answers:

6

I'm working on a game engine and I'm too much of a wuss to write image loaders for multiple formats, so my question is this: Is there an abstracted image loading library to load image files? I just need to load files then splat them on to the screen using an array of pixels.

+8  A: 

I'm always a fan of CImg. It's very easy to use. Another user liked the answer as well. I'll post the same example I posted in the answer so you can see how easy it is to access pixels and dimension info.

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;
SB
+2  A: 

FreeImage is a good open source library

Here is an example code, data is accessible with "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);
Tomaka17
A: 

You could have a look at SDL_Image, a sub-project of the Simple DirectMedia Layer. It serves as an easy abstraction for loading several different image formats. SDL is written in C but is easy to use with either C or C++ code.

Kristo
OP does not even imply that C and C++ are 'a language'. OP is looking for a solution that is either C or C++.
gbrandt
@gbrandt, updated my answer to reflect the implementation language for SDL.
Kristo
+2  A: 

If you're using OpenGL, then DevIL is a good choice since its style and conventions adhere to OpenGL more than any other library. It's relatively easy to set up and also has great support for multiple formats.

One thing about the wuss thing. While it's nice to set up working 3rd party code that has been well tested and saves you time, there's something to be also said about learning how image loading works and why it works the way it does. If you really want to get good at something, I believe that you need to actually learn how to do it from scratch. Even if you end up using 3rd party code in the end.

zdawg
+1  A: 

Yet another possibility (primarily, if not exclusively for Windows) is CXImage. Its obvious advantage over many others is supporting many camera raw formats, in case that matters to you.

Jerry Coffin
A: 

There is Boost's GIL which was originally developed by Adobe. It might not be the most intuitive one, but it certainly is one of the most complete and powerful libs.

Gianni