FineKernelToolKit  2.8.10
FK/Image.h
説明を見る。
00001 /****************************************************************************
00002  *
00003  *  Copyright (c) 1999-2011, Fine Kernel Project, All rights reserved.
00004  *
00005  *  Redistribution and use in source and binary forms,
00006  *  with or without modification, are permitted provided that the
00007  *  following conditions are met:
00008  *
00009  *      - Redistributions of source code must retain the above
00010  *          copyright notice, this list of conditions and the
00011  *          following disclaimer.
00012  *
00013  *      - Redistributions in binary form must reproduce the above
00014  *          copyright notice, this list of conditions and the
00015  *          following disclaimer in the documentation and/or
00016  *          other materials provided with the distribution.
00017  *
00018  *      - Neither the name of the copyright holders nor the names
00019  *          of its contributors may be used to endorse or promote
00020  *          products derived from this software without specific
00021  *          prior written permission.
00022  *
00023  *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00024  *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00025  *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
00026  *  FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
00027  *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00028  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
00029  *  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
00030  *  SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00031  *  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
00032  *  STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
00033  *  IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00034  *  POSSIBILITY OF SUCH DAMAGE. 
00035  *
00036  ****************************************************************************/
00037 /****************************************************************************
00038  *
00039  *  Copyright (c) 1999-2011, Fine Kernel Project, All rights reserved.
00040  *
00041  *  本ソフトウェアおよびソースコードのライセンスは、基本的に
00042  *  「修正 BSD ライセンス」に従います。以下にその詳細を記します。
00043  *
00044  *  ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
00045  *  以下の条件を満たす場合に限り、再頒布および使用が許可されます。
00046  *
00047  *  - ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
00048  *      および下記免責条項を含めること。
00049  *
00050  *  - バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の
00051  *      資料に、上記の著作権表示、本条件一覧、および下記免責条項を
00052  *      含めること。
00053  *
00054  *  - 書面による特別の許可なしに、本ソフトウェアから派生した製品の
00055  *      宣伝または販売促進に、本ソフトウェアの著作権者の名前または
00056  *      コントリビューターの名前を使用してはならない。
00057  *
00058  *  本ソフトウェアは、著作権者およびコントリビューターによって「現
00059  *  状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、
00060  *  および特定の目的に対する適合性に関す暗黙の保証も含め、またそれ
00061  *  に限定されない、いかなる保証もないものとします。著作権者もコン
00062  *  トリビューターも、事由のいかんを問わず、損害発生の原因いかんを
00063  *  問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その
00064  *  他の)不法行為であるかを問わず、仮にそのような損害が発生する可
00065  *  能性を知らされていたとしても、本ソフトウェアの使用によって発生
00066  *  した(代替品または代用サービスの調達、使用の喪失、データの喪失、
00067  *  利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、
00068  *  間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害に
00069  *  ついて、一切責任を負わないものとします。
00070  *
00071  ****************************************************************************/
00072 
00074 
00075 #ifndef __FK_IMAGE_HEADER__
00076 #define __FK_IMAGE_HEADER__
00077 
00078 #include <FK/Base.h>
00079 #include <FK/Material.h>
00080 #include <vector>
00081 #include <string>
00082 
00083 #ifndef FK_DOXYGEN_USER_PROCESS
00084 
00085 #ifdef  NO_GL_LIBRARY
00086 typedef unsigned char   fk_ImType;
00087 typedef unsigned int    fk_TexID;
00088 #else
00089 #include <FK/OpenGL.H>
00090 typedef GLubyte         fk_ImType;
00091 typedef GLuint          fk_TexID;
00092 #endif
00093 
00094 
00095 enum fk_ImageStatus {
00096     FK_IMAGE_OK,
00097     FK_IMAGE_OPENERROR,
00098     FK_IMAGE_DATAERROR,
00099     FK_IMAGE_READERROR
00100 };
00101 
00102 enum fk_ImageFix {
00103     FK_FIX_LARGE,
00104     FK_FIX_SMALL,
00105     FK_FIX_64,
00106     FK_FIX_128,
00107     FK_FIX_256,
00108     FK_FIX_512,
00109     FK_FIX_1024,
00110     FK_FIX_2048,
00111     FK_FIX_4096,
00112     FK_FIX_8192,
00113     FK_FIX_16384,
00114     FK_FIX_32768,
00115     FK_FIX_65536
00116 };
00117 
00118 #endif
00119 
00121 enum fk_ImageType {
00122     FK_IMAGE_BMP,       
00123     FK_IMAGE_PNG,       
00124     FK_IMAGE_JPG        
00125 };
00126 
00128 enum fk_SnapProcMode {
00129     FK_SNAP_GL_FRONT,   
00130     FK_SNAP_GL_BACK,    
00131     FK_SNAP_WIN32_GDI,  
00132     FK_SNAP_D3D_WINDOW, 
00133     FK_SNAP_D3D_FULL    
00134 };
00135 
00137 
00141 class fk_Dimension {
00142  public:
00143     int     w; 
00144     int     h; 
00145 
00147 
00151     fk_Dimension(int w = 0, int h = 0);
00152 
00154     fk_Dimension(const fk_Dimension &);
00155 
00157 
00161     void set(int w, int h);
00162 };
00163 
00165 
00171 class fk_Rect {
00172  public:
00173     int     x;  
00174     int     y;  
00175     int     w;  
00176     int     h;  
00177 
00179 
00185     fk_Rect(int x = 0, int y = 0, int w = 0, int h = 0);
00186 
00188     fk_Rect(const fk_Rect &);
00189 
00191 
00197     void            set(int x, int y, int w, int h);
00198 
00200 
00204     void            setPos(int x, int y);
00205 
00207 
00211     void            setSize(int w, int h);
00212 
00214 
00217     fk_Dimension    getSize(void);
00218 };
00219 
00221 
00235 class fk_Image : public fk_BaseObject {
00236 
00237     friend class    fk_Texture;
00238 
00239  private:
00240 
00241     fk_Dimension            imageSize, bufSize;
00242     std::vector<fk_ImType>  imageBuf;
00243     fk_ImType               *bufPointer;
00244     fk_TexID                texID;
00245     bool                    initFlag;
00246     // テクスチャの部分更新用情報
00247     fk_Rect                 updateRect;
00248 
00249     unsigned int        ChgUInt(fk_ImType *, int) const;
00250     unsigned int        ChgUShort(fk_ImType *, int) const;
00251 
00252     int                 GetOffset(int, int) const;
00253     fk_ImType           RoundVal(int) const;
00254     fk_ImageStatus      CreateImg(const std::string);
00255     fk_ImageStatus      CreateImg(fk_ImType *);
00256     void                CreateBuffer(bool = true);
00257     void                CreateBuffer(int, int, bool = true);
00258     void                CreateBuffer(const fk_Dimension, bool = true);
00259     bool                IsPixelStatus(int, int) const;
00260     int                 GetOneBufferSize(int, int);
00261     int                 GetFixVal(fk_ImageFix, int) const;
00262 
00263     void                SetLong2Byte(long, fk_ImType *, int);
00264     void                SetInt2Byte(int, fk_ImType *, int);
00265 
00266     bool                GetInitFlag(void);
00267     void                SetInitFlag(bool);
00268     void                SetTexID(const fk_TexID);
00269 
00270     bool                IsBmpFile(const std::string) const;
00271     bool                IsBmpData(fk_ImType *) const;
00272     fk_ImageStatus      LoadBmpFile(const std::string);
00273     fk_ImageStatus      LoadBmpData(fk_ImType *);
00274     void                SetRGBA4Bmp(int, int, fk_ImType *,
00275                                     int, std::vector<fk_ImType> &);
00276 
00277     bool                GetBmpFileHeader(FILE *, fk_ImType *);
00278     bool                GetBmpInfoHeader(FILE *, fk_ImType *);
00279     fk_Dimension        GetBmpSize(fk_ImType *);
00280 
00281     fk_ImageStatus      SaveBmpFile(std::string, bool);
00282     void                MakeBmpFileHeader(int, int, int,
00283                                           std::vector<fk_ImType> &);
00284     void                MakeBmpInfoHeader(int, int, int,
00285                                           std::vector<fk_ImType> &);
00286     void                MakeBmpBuffer(int, int, bool, fk_ImType *);
00287 
00288     bool                IsPngFile(const std::string) const;
00289     bool                IsPngData(fk_ImType *) const;
00290     fk_ImageStatus      LoadPngFile(const std::string);
00291     fk_ImageStatus      LoadPngData(fk_ImType *);
00292 
00293  public:
00294 
00296 
00300     fk_Image(int w = 0, int h = 0);
00301 
00303     virtual ~fk_Image();
00304 
00306     fk_Image(const fk_Image &);
00307 
00309 
00313     void                    init();
00314 
00316 
00323     bool                    readBMP(const std::string fileName);
00324 
00326 
00335     bool                    readBMPData(fk_ImType *buf);
00336 
00338 
00345     bool                    readPNG(const std::string fileName);
00346 
00348 
00357     bool                    readPNGData(fk_ImType *buf);
00358 
00360 
00365     bool                    readJPG(const std::string fileName);
00366 
00368 
00381     bool                    writeBMP(const std::string fileName,
00382                                      const bool transFlg = false);
00383 
00385 
00394     bool                    writePNG(const std::string fileName,
00395                                      const bool transFlg = true);
00396 
00398 
00411     bool                    writeJPG(const std::string fileName,
00412                                      int quality = 80);
00413 
00415 
00426     void                    newImage(int w, int h, bool initFlg = true);
00427 
00429 
00435     void                    copyImage(const fk_Image *image);
00436 
00438 
00449     void                    copyImage(const fk_Image *image, int x, int y);
00450 
00452 
00463     bool                    subImage(const fk_Image *image,
00464                                      int x, int y, int w, int h);
00465 
00467 
00470     int                     getWidth(void) const;
00471 
00473 
00476     int                     getHeight(void) const;
00477 
00479 
00482     const fk_Dimension *    getImageSize(void);
00483 
00485 
00507     const fk_Dimension *    getBufferSize(void);
00508 
00510 
00520     int                     getR(int x, int y) const;
00521 
00523 
00533     int                     getG(int x, int y) const;
00534 
00536 
00546     int                     getB(int x, int y) const;
00547 
00549 
00559     int                     getA(int x, int y) const;
00560 
00562 
00572     fk_Color                getColor(int x, int y) const;
00573 
00575 
00592     bool                    setRGBA(int x, int y, int r, int g, int b, int a);
00593 
00595 
00611     bool                    setRGB(int x, int y, int r, int g, int b);
00612 
00614 
00628     bool                    setR(int x, int y, int r);
00629 
00631 
00645     bool                    setG(int x, int y, int g);
00646 
00648 
00662     bool                    setB(int x, int y, int b);
00663 
00665 
00679     bool                    setA(int x, int y, int a);
00680 
00682 
00693     bool                    setColor(int x, int y, const fk_Color &col);
00694 
00696 
00703     void                    fillColor(const fk_Color &col);
00704 
00706 
00716     void                    fillColor(int r, int g, int b, int a = 0);
00717 
00719 
00732     const fk_ImType *       getBufPointer(void) const;
00733 
00734 #ifndef FK_DOXYGEN_USER_PROCESS
00735 
00736     fk_TexID                GetTexID(void);
00737     void                    ClearUpdateArea(void);
00738     void                    SetUpdateArea(void);
00739     void                    SetUpdateArea(int, int, int, int);
00740     fk_Rect                 GetUpdateArea(void);
00741 
00742 #endif
00743 
00744 };
00745 
00746 #endif  // __FK_IMAGE_HEADER__
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義