代码之家  ›  专栏  ›  技术社区  ›  Jookia

C/C++图像加载[关闭]

  •  12
  • Jookia  · 技术社区  · 16 年前

    我正在开发一个游戏引擎,我太笨了,无法为多种格式编写图像加载程序,所以我的问题是:是否有一个抽象的图像加载库来加载图像文件?我只需要加载文件,然后用像素数组将它们显示在屏幕上。

    7 回复  |  直到 10 年前
        1
  •  23
  •   Community Mohan Dere    9 年前

    我一直很喜欢 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;
    
        2
  •  11
  •   Tomaka17    16 年前

    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
  •  4
  •   Gianni    16 年前

    Boost's GIL 它最初是由Adobe开发的。它可能不是最直观的,但它肯定是最完整和最强大的libs之一。

        4
  •  3
  •   Zoli    16 年前

    如果您使用的是OpenGL,那么 DevIL 是一个很好的选择,因为它的风格和惯例比任何其他库更符合OpenGL。它相对容易设置,并且对多种格式也有很好的支持。

    有一件事是关于无赖的。虽然设置已经过良好测试的可工作的第三方代码并为您节省时间是很好的,但是对于了解图像加载是如何工作的以及为什么它以这种方式工作也有一些话要说。如果你真的想在某件事上有所成就,我相信你需要从零开始学习。即使最终使用第三方代码。

        5
  •  2
  •   Michael Kristofik    16 年前

    你可以看看 SDL_Image ,的子项目 Simple DirectMedia Layer . 它可以作为加载几种不同图像格式的简单抽象。SDL是用C编写的,但是C或C++代码很容易使用。

        6
  •  1
  •   Jerry Coffin    16 年前

    另一种可能性(主要是,如果不是专门针对Windows的话)是 CXImage . 它的明显优势是支持许多相机原始格式,以防这对您很重要。

        7
  •  0
  •   Vertexwahn    10 年前

    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