00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00024 #ifndef SHIMAGE_HPP
00025 #define SHIMAGE_HPP
00026
00027 #include <string>
00028 #include "ShDllExport.hpp"
00029 #include "ShRefCount.hpp"
00030 #include "ShMemory.hpp"
00031
00032 namespace SH {
00033
00039 class
00040 SH_DLLEXPORT ShImage : public ShRefCountable {
00041 public:
00042 ShImage();
00043 ShImage(int width, int height, int depth);
00044
00045 ShImage(const ShImage& other);
00046
00047 ~ShImage();
00048
00049 ShImage& operator=(const ShImage& other);
00050
00051
00052 int width() const;
00053 int height() const;
00054 int elements() const;
00055
00056
00057 float operator()(int x, int y, int i) const;
00058
00059
00060 float& operator()(int x, int y, int i);
00061
00062
00063
00064
00065 void loadPng(const std::string& filename);
00066
00067
00068 void savePng(const std::string& filename, int inverse_alpha=0);
00069
00070
00071 void savePng16(const std::string& filename, int inverse_alpha=0);
00072
00073 ShImage getNormalImage();
00074
00075 const float* data() const;
00076 float* data();
00077
00078 void dirty();
00079 ShMemoryPtr memory();
00080 ShPointer<const ShMemory> memory() const;
00081
00082 private:
00083 int m_width, m_height;
00084 int m_elements;
00085 ShHostMemoryPtr m_memory;
00086 };
00087
00088 }
00089
00090 #endif