我准备写一个处理所有图象文件的类库(不要很专业),包括.bmp,.jpge,.tif等等,主要是将其保存为满足OpenGL的贴图要求格式。我已实现了一点关于bmp的类。请大家给出意见,如何才能使整个类库有更好的结构。使其有更好的易用性,更好的继承性,更好的扩展性。总之,使类库更专业。由于无法列出所有的代码,所以只给出了头文件。
请愿意给出意见的,可就地给出,或请发Email到:[email protected],我可将代码通过邮件给你。但一定要多提你的宝贵意见喔!非常感谢!!!!!
下面是代码:
/*******************************************************/
/*                 bmp.h                               */
/*******************************************************/
#if !defined(_bitmap)
#define _bitmap#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000#include "File.h"
#include <TCHAR.h>class CBMP  
{
public:
/***********************************************/
/*                                             */
/*      bmp的构造函数和与文件挂钩函数          */
/*                                             */
/***********************************************/
//缺省CBMP构造函数(没有与文件挂钩)
CBMP() {FileName[0]=(TCHAR)'\0';}
//CBMP构造函数(与文件挂钩)(保留!!)
CBMP(TCHAR *filename) {FileName[0]=(TCHAR)'\0';_tcscpy(FileName,filename);}
//设置bmp的全文件名
void SetFileName(TCHAR *filename) {_tcscpy(FileName,filename);} /***********************************************/
/*                                             */
/*         bmp的初始化信息分配函数             */
/*                                             */
/***********************************************/
//bmp的初始化函数(必调用)
void Init(void); /***********************************************/
/*                                             */
/*             bmp的操纵变换函数               */
/*                                             */
/***********************************************/
//缩放图像
void Scale(BYTE scale_x,BYTE scale_y,BOOL flag=TRUE);
//变换为OpenGL的贴图类型(Clip方式)
void ConvertToMaterial_Clip(void);
//变换为OpenGL的贴图类型(模糊方式)
void ConverToMaterial_Blend(void);

/***********************************************/
/*                                             */
/*              贴图的保存函数                 */
/*                                             */
/***********************************************/
//保存贴图
//choice为0,为RBG模式,choice为1,为RGBA模式
BOOL SaveMaterial(TCHAR *filename,BYTE choice=0);

/***********************************************/
/*                                             */
/*             bmp的信息获取函数               */ 
/*                                             */
/***********************************************/
//获得以像素为单位的图像宽度
DWORD GetWidth() {return width;}
//获得以像素为单位的图像高度
DWORD GetHeight() {return height;}
//获得属性字符串
TCHAR * GetInfoString(void) {return InfoStr;} /***********************************************/
/*                                             */
/*               bmp的显示函数                 */ 
/*                                             */
/***********************************************/
//在GDI方式下显示bmp
void ShowDIB(HWND hwnd);

/***********************************************/
/*                                             */
/*               bmp的析构函数                 */ 
/*                                             */
/***********************************************/
virtual ~CBMP();private:
/***********************************************/
/*                                             */
/*             bmp的内部调用函数               */ 
/*                                             */
/***********************************************/
//读文件,获得文件数据
BOOL ReadData(void);
//生成属性字符串
void GenerateInformationString(void);private:
//文件内容指针
BYTE  *pFile;              //指向文件头
BYTE  *pbits;              //指向像素位起始指针
//信息变量                 
TCHAR *version;            //版本号
LONG   width;              //宽度
LONG   height;             //高度
WORD   bcBitCount;         //每像素位数
DWORD  Compress;           //压缩方式
DWORD  BlueMask;           //蓝色位掩码
DWORD  GreenMask;          //绿色位掩码
DWORD  RedMask;            //红色位掩码
DWORD  FileSize;           //文件大小
//其它
TCHAR  FileName[MAX_PATH]; //文件名 
TCHAR  InfoStr[200];    //信息字符串
};#endif // !defined(_bitmap)

解决方案 »

  1.   

    如果仅仅是要把格式作以下转换,何必这么啰嗦?全部都转成一种中间格式,比如DIB,然后后续的操作直接以DIB为操作对象。何种扩展需要?另外,你这CBMP类到底想干什么?
      

  2.   

    这是一个大系统中的一部分,主要是为了导入各种格式的图像文件,并用于作为3D图像的贴图格式。我想过变为DIB,但有个问题,DIB并不是一个很好的图像格式,针对我的应用,这一图像格式包括了很多多余的部分。另外,全部转换成中间格式,不是多了一步吗?因为本来我只要像素数,对于压缩后解压的图像,我不必回去吧?我想把每种格式的图像写为一个类,并且均包括上面这个类的内容。因而哪些可公用提取?并且要为以后的其它出现的图像格式留个易扩展的接口。
      

  3.   

    你可以到网上下一个图形库,
    参照一下.如果需要我们也可以交流一下,
    我这边有支持jpg,TGA的代码