image.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:2k
源码类别:

OpenGL

开发平台:

Visual C++

  1. // image.h
  2. //
  3. // Copyright (C) 2001, Chris Laurel
  4. //
  5. // This program is free software; you can redistribute it and/or
  6. // modify it under the terms of the GNU General Public License
  7. // as published by the Free Software Foundation; either version 2
  8. // of the License, or (at your option) any later version.
  9. #ifndef _CELENGINE_IMAGE_H_
  10. #define _CELENGINE_IMAGE_H_
  11. #include <string>
  12. #include <celutil/basictypes.h>
  13. // The image class supports multiple GL formats, including compressed ones.
  14. // Mipmaps may be stored within an image as well.  The mipmaps are stored in
  15. // one contiguous block of memory (i.e. there's not an instance of Image per
  16. // mipmap.)  Mip levels are addressed such that zero is the base (largest) mip
  17. // level.
  18. class Image
  19. {
  20.  public:
  21.     Image(int fmt, int w, int h, int mips = 1);
  22.     ~Image();
  23.     int getWidth() const;
  24.     int getHeight() const;
  25.     int getPitch() const;
  26.     int getMipLevelCount() const;
  27.     int getFormat() const;
  28.     int getComponents() const;
  29.     unsigned char* getPixels();
  30.     unsigned char* getPixelRow(int row);
  31.     unsigned char* getPixelRow(int mip, int row);
  32.     unsigned char* getMipLevel(int mip);
  33.     int getSize() const;
  34.     int getMipLevelSize(int mip) const;
  35.     bool isCompressed() const;
  36.     bool hasAlpha() const;
  37.     Image* computeNormalMap(float scale, bool wrap) const;
  38.     enum {
  39.         ColorChannel = 1,
  40.         AlphaChannel = 2
  41.     };
  42.  private:
  43.     int width;
  44.     int height;
  45.     int pitch;
  46.     int mipLevels;
  47.     int components;
  48.     int format;
  49.     int size;
  50.     unsigned char* pixels;
  51. };
  52. extern Image* LoadJPEGImage(const std::string& filename,
  53.                             int channels = Image::ColorChannel);
  54. extern Image* LoadBMPImage(const std::string& filename);
  55. extern Image* LoadPNGImage(const std::string& filename);
  56. extern Image* LoadDDSImage(const std::string& filename);
  57. extern Image* LoadImageFromFile(const std::string& filename);
  58. #endif // _CELENGINE_IMAGE_H_