📄 bmpprocessor.h
字号:
// BmpProcessor.h: interface for the CBmpProcessor class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_BMPPROCESSOR_H__800DDF1C_4D32_4B1F_87E8_5F54EC9569B2__INCLUDED_)
#define AFX_BMPPROCESSOR_H__800DDF1C_4D32_4B1F_87E8_5F54EC9569B2__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "sci_types.h"
/////////////////////////////////////////
#define MAX_FRAME_NUM 99
typedef struct /***** Frame infomation structure ****/
{
uint32 code_size; /*code size */ //Zhemin.Lin, the MSB indicate if the code stream isn't commpressed
//if bit[31] == 0, it's run length encoding, else not encoding
uint32 code_offset; /*code start address*/
}FRAMEINFO;
typedef struct /***** Movie infomation structure ****/
{
uint32 frame_num; /* frame number */
FRAMEINFO frame_infos[MAX_FRAME_NUM]; /* frame infomations*/
}MOVIEINFO;
class CBmpProcessor
{
public:
//
BOOL LoadBmpFile( LPCTSTR pszFileName, LPBYTE * pBmpStream, int * pSize = NULL, BOOL b565 = TRUE );
void FreeBmpStream( LPBYTE pBmpStream ) { _ASSERTE( pBmpStream != NULL ); free(pBmpStream); }
CSize GetBmpSize( LPBYTE pBmp );
CSize GetMovieSize( LPBYTE pMovie );
HBITMAP CreateBitmap( LPBYTE pBmpStream );
HBITMAP CreateBitmap( LPCTSTR pszFileName );
void DeleteBitmap( HBITMAP hBmp );
// 将原始位图数据流转换为16位565格式的数据流(这里的数据流指完整的位图文件内容)
// 如果pBmp就是16位565格式的,直接返回此指针,否则会产生新的内存块
BOOL Convert24To565Stream( LPBYTE p24Bmp, LPBYTE &p16Bmp, int &nSize );
BOOL Convert555To565Stream( LPBYTE p555Bmp, LPBYTE &p565Bmp, int &nSize );
BOOL Convert16To24Stream( LPBYTE p16Bmp, LPBYTE & p24Bmp, int &nSize );
BOOL CompressBmp( LPBYTE p565Bmp, LPBYTE &pCompressed, int &nCompressedSize );
BOOL CompressMovie( LPCTSTR pszDirName, LPBYTE &pCompressed, int &nCompressedSize, int &nNum, UINT nTransColor = 0 );
void ReleaseCompressedStream( LPBYTE pCompressed );
BOOL UnCompressBmp( LPBYTE pCompressed, LPBYTE &pBmp, int &nSize );
BOOL UnCompressMovie( LPBYTE pMovie, LPCTSTR pszDirName );
BOOL UnCompressMovie( LPBYTE pMovie, int nIdx, LPBYTE &pBmp );
BOOL BmpConvertToBigEndian(LPBYTE p565Bmp, int nSize, BOOL bCompressed);
BOOL BmpConvertToLitEndian(LPBYTE p565Bmp, int nSize, BOOL bCompressed);
BOOL MovieConvertToBigEndian(LPBYTE pMovie, int nSize, BOOL bCompressed = TRUE);
BOOL MovieConvertToLitEndian(LPBYTE pMovie, int nSize, BOOL bCompressed = TRUE);
BOOL IsMovieValidate(LPCTSTR pszDirName, int * pFrameNum);
UINT GetAnimTransColor(LPBYTE pMovie);
void ForceConvertBmpFile( LPCTSTR pszFileName );
BOOL DeleteDirectory(LPCTSTR lpszDirName);
LPCTSTR GetErrMsg(void) const { return m_szErrMsg; }
public:
CBmpProcessor();
~CBmpProcessor();
protected:
// 注意:此函数不考虑对齐的情况(用在只转换一行的情况下)
void Bmp16To24( LPWORD p16Bmp, int nPixel, LPBYTE p24Bmp, int n24Size, BOOL bIs555 = TRUE );
void Bmp24To565(LPBYTE p888, int n888Size, LPWORD p565, int n565Size);
private:
_TCHAR m_szErrMsg[ 380 ];
};
#endif // !defined(AFX_BMPPROCESSOR_H__800DDF1C_4D32_4B1F_87E8_5F54EC9569B2__INCLUDED_)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -