📄 zgraphdib.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 + -