我正在开发一个游戏引擎,但是我太懦弱了,无法编写多种格式的图像加载器。我的问题是:是否有抽象的图像加载库来加载图像文件?我只需要加载文件,然后使用像素数组将它们展现在屏幕上。
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);
有一个被Adobe最初开发的Boost's GIL。虽然它可能不是最直观的,但它肯定是其中一个最完整和强大的库。
boost::gil
本身不会加载任何图像格式。它提供了一个统一的接口来执行像素算法。在 boost::gil
中的图像加载器助手需要您拥有相应的库(例如 libtiff
、libpng
等)。 - kizzx2OpenImageIO支持许多不同的文件格式,其中包括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。