⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zgraphdib.h

📁 Symbian手机智能操作系统下的源码,图像查看软件,支持十几种图形格式.
💻 H
字号:
#ifndef ZGRAPHDIB_H_HEADER_INCLUDED_C005A502
#define ZGRAPHDIB_H_HEADER_INCLUDED_C005A502

#include <windows.h>
#include <TCHAR.h>
#include "math.h"

//2005.2.4
//1. 通用存储,以位图形式保存在内存中
//2. 支持下面IDBFormat中所列的格式(没有全部测试)
//3. 对调色板的支持不够.要实现对调色板的单值设定/获取,整体的设置/获取
//4. 对像素行的支持不够.要实现对某行的设置/获取.
//5. 对OS2版本的存储支持不够
//6. 对内部的数据添加设置/获取函数
//
class zGraphDib
{
	bool b_create;
  public:
    class zGraphDibInfo
    {
	protected:
        struct DIBINFO
        {
            BITMAPINFOHEADER bmiHeader;		//位图信息头
            RGBQUAD bmiColors[256+3];		//颜色表
        };
	public:
        void SetFormat(int width, int height, int bitcount, int compression = BI_RGB);
        void SetGrayScale(DWORD mask);
        BITMAPINFO *GetBMI() const;
        BITMAPINFO *CopyBMI() const;
        DIBINFO m_dibinfo;
    };

	enum DIBFormat 
	{ 
		DIB_1BPP,					//单色位图,1/8 bytes
		DIB_2BPP,					//4色位图,1/4,bytes
		DIB_4BPP,					//16色位图,1/2byte
		DIB_4BPPRLE,				//16色行程码压缩(only下上DIB),1/2byte
		DIB_8BPP,					//256色图像,1byte/pixel
		DIB_8BPPRLE,				//256色行程码压缩(only下上DIB),1byte/pixel
		DIB_16RGB555,				//32768色图像,2byte/pixel
		DIB_16RGB565,				//65536色图像,2byte/pixel
		DIB_24RGB888,				//16677721色图像,3byte/pixel
		DIB_32RGB888,				//16677721色图像,4byte/pixel
		DIB_32RGBA8888,				//16677721色, 4byte/pixel
		DIB_16RGBbitfields,			//16位图像,用3个位屏蔽取RGB值
		DIB_32RGBbitfields,			//32位图像,用3个位屏蔽取RGB值
		DIB_JPEG,					//JPEG压缩图像
		DIB_PNG						//PNG压缩图像
	};
    
	enum  
	{ 
		DIB_BMI_NEEDFREE = 1,		//BMI内存释放
		DIB_BMI_READONLY = 2,		//BMI只读,不释放内存
		DIB_BITS_NEEDFREE = 4,		//BITS释放内存
		DIB_BITS_READONLY = 8		//BITS数据只读,不释放内存
	};
	
	//构造
    zGraphDib();
    virtual ~zGraphDib();
	//函数成员
	bool IsCreate() { return b_create;};						//是否已经建立图像
	bool Create(int width, int height, int bitcount);			//建立
    bool AttachDIB(BITMAPINFO *pDIB, BYTE *pBits, int flags);	//装入图像
    bool LoadBitmap(HMODULE hModule, LPCTSTR pBitmapName);		//从资源载入
    void ReleaseDIB();											//删除图像
	bool IsCompressed() const;									//是否压缩
	//像素处理
	DWORD GetPixelIndex(int x, int y) const;					//像素存取
	BOOL  SetPixelIndex(int x, int y, DWORD index);				//设置像素
	//绘制
	int DrawDib(HDC hDC, int dx, int dy, int dw, int dh, int sx, int sy, int sw, int sh, DWORD rop);
	//静态功能
    static int GetDIBColorCount(const BITMAPINFOHEADER &bmih);	//获取图像颜色深度
    static int GetDIBPixelSize(const BITMAPINFOHEADER &bmih);	//图像大小
	
	//成员
    DIBFormat m_nImageFormat;	// 图形格式
    int m_Flags;				// DIB_BMI_NEEDFREE,.... 内存使用方式(是否需要释放)
    BITMAPINFO *m_pBMI;			// 位图信息块指针, BITMAPINFOHEADER + mask + color table
    BYTE *m_pBits;				// 图像象素阵列指针
    DWORD *m_pBitFields;		// 16,32位屏蔽
    int m_nWidth;				// 图像宽度
    int m_nHeight;				// 图像高度
    int m_nPlanes;				// 图像平面数
    int m_nBitCount;			// 每平面多少位
    int m_nColorDepth;			// 图像颜色深度 bit count * plane count
    int m_nImageSize;			// 像素阵列大小
	int m_nBPS;					// 每行占字节数
    BYTE *m_pOrigin;			// 像素起始点
    int m_nDelta;				// 行与行的间隔
    RGBQUAD *m_pRGBQUAD;		// V3,4,5 调色板
    RGBTRIPLE *m_pRGBTRIPLE;	// 包含在m_pBMI, OS/2 图像调色板
    int m_nClrUsed;				// 在调色板中使用的颜色数
    int m_nClrImpt;				// 实际使用的颜色数
};


#endif /* ZGRAPHDIB_H_HEADER_INCLUDED_C005A502 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -