You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

100 lines
3.0 KiB
C

1 month ago
//////////////////////////////////////////////////////////////////////////////
//<2F>ļ<EFBFBD> Texture.h
//<2F><>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>:
//
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д: 2005-12-07
/////////////////////////////////////////////////////////////////////////////
//********************************************
// class CTexture
//********************************************
// This object stores a bitmap image used as
// an Coin3D texture.
// Depth are currently 8 16 24 or 32 bits,
// Modes are : L(Lighteness), LA, RGB, RGBA (Alpha layer).
//********************************************
#ifndef _TEXTURE_
#define _TEXTURE_
#include "DrawImage\ImageBase.h"
namespace NCube
{
class AFX_EXT_CLASS CTexture : public CObject
{
public :
// Construction / destruction
CTexture();
virtual ~CTexture();
// Memory
int Create(int width, int height, int bpp);
int CreateFrom(CImageBase& img);
//<2F><><EFBFBD><EFBFBD>ͼ<EFBFBD><CDBC>
int ToImageBase(CImageBase& img);
//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>Զ<EFBFBD>ɾ<EFBFBD><C9BE><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD><EBA3AC><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0><EFBFBD>ڲ<EFBFBD><DAB2><EFBFBD><EFBFBD>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
int AttachBuffer(unsigned char *buffer, int width, int height, int bpp);
//<2F><>Coin3D<33><44>ʹ<EFBFBD>øú<C3B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ʽΪSoSFImage::NO_COPY_AND_DELETE
//<2F>Ա<EFBFBD><D4B1><EFBFBD>Coin3Dʹ<44><CAB9>delete<74><65><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>ڴ<EFBFBD>
unsigned char* Detach(void);
//<2F><>Coin3D<33><44>ʹ<EFBFBD>øú<C3B8><C3BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD>ÿ<EFBFBD><C3BF><EFBFBD><EFBFBD><EFBFBD>ʽΪSoSFImage::COPY
unsigned char* GetData(void) { return m_pData; }
void Free(void);
// File reading, writing
void Serialize(CArchive& ar);
int ReadImage(char *filename);
int SaveImage(char *filename);
void operator=(CTexture& ir);
// Datas (explicit inline functions)
unsigned char* GetData(int i, int j){ return m_pData + m_lineWidthBytes*j + i*m_nBpp/8; }
int GetDataBytes() { return m_lineWidthBytes*m_nHeight; }
int GetWidth(void) { return m_nWidth; }
int GetHeight(void) { return m_nHeight;}
int GetBPP(void) { return m_nBpp; }
int GetBytesPerPixel() { return m_nBpp/8; }
void SetPixel(int i, int j, RGBQUAD rgba);
void SetPixel(int i, int j, COLORREF color);
RGBQUAD GetPixel(int i, int j);
// Misc
int IsValid();
int BGRtoRGB(void);
// Alpha<68><61><30><CEAA>ȫ͸<C8AB><CDB8><EFBFBD><EFBFBD>255Ϊ<35><CEAA>͸<EFBFBD><CDB8>
int HasAlpha() { return (m_nBpp == 32 || m_nBpp == 16); }
int AddAlphaLayer(unsigned char alpha);
int SetAlphaLayer(unsigned char alpha);
void SetAlpha(int i, int j, unsigned char alpha); //<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>
void SetColorAlpha(COLORREF color, unsigned char alpha);//<2F><><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>
int MirrorX(void);
int MirrorY(void);
// Members datas
protected:
//<2F>ɰ<EFBFBD><C9B0><EFBFBD>4<EFBFBD>ֳ<EFBFBD><D6B3>ȵ<EFBFBD><C8B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>
//<2F><>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>1<EFBFBD><31><EFBFBD>ֽڣ<D6BD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD>0-255<35><35>
//˫ͨ<CBAB><CDA8><EFBFBD><EFBFBD>2<EFBFBD><32><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ⱥ<EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD>(alpha)<29><><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ռһ<D5BC><D2BB><EFBFBD>ֽ<EFBFBD>
//<2F><>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>3<EFBFBD><33><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̡<EFBFBD><CCA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ռһ<D5BC><D2BB><EFBFBD>ֽ<EFBFBD>
//<2F><>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>4<EFBFBD><34><EFBFBD>ֽڣ<D6BD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̡<EFBFBD><CCA1><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݣ<EFBFBD><DDA3><EFBFBD>ռһ<D5BC><D2BB><EFBFBD>ֽ<EFBFBD>
//<2F><>ʾ<EFBFBD><CABE>ͨ<EFBFBD><CDA8>ʹ<EFBFBD>õ<EFBFBD><C3B5><EFBFBD>˫ͨ<CBAB><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD>Ƚ<EFBFBD><C8BD>ٵļ<D9B5><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ţ<EFBFBD><C5A3><EFBFBD>width*height<68><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
unsigned char* m_pData; // datas
int m_nWidth; // width (pixels)
int m_nHeight; // height (pixels)
int m_nBpp; // bits per pixel<65><6C><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֧<EFBFBD><D6A7>8<EFBFBD><38>16<31><36>24<32><34>32<33><32><EFBFBD><EFBFBD>
int m_lineWidthBytes; // width (in bytes, һ<><D2BB><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5>ֽڸ<D6BD><DAB8><EFBFBD><EFBFBD><EFBFBD>û<EFBFBD>н<EFBFBD><D0BD><EFBFBD>32λ<32><CEBB><EFBFBD><EFBFBD>)
};
};
using namespace NCube;
#endif // _TEXTURE_