C/C++图像加载

Joo*_*kia 12 c c++ image loading

我正在开发一个游戏引擎,我为编写多种格式的图像加载器太麻烦了,所以我的问题是:是否有一个抽象的图像加载库来加载图像文件?我只需要加载文件然后使用像素数组将它们打印到屏幕上.

NG.*_*NG. 23

我一直是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;
Run Code Online (Sandbox Code Playgroud)


Tom*_*a17 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);
Run Code Online (Sandbox Code Playgroud)