📄 hgraphic2d.h
字号:
/********************************************************************
*
* =-----------------------------------------------------------------=
* = ____ _________ =
* = / _ \ \___ __/ =
* = / /_/ / ____ / / =
* = / _ \ ● / _ \ / / =
* = / /_/ // // / / // / =
* = \______//_//_/ /_//_/ =
* = =
* = Copyright (c) BIN Technology studio,2004 =
* = LET'Z BT =
* =-----------------------------------------------------------------=
*
* FileName : hGraphic2D.h
* Description : 2D图像接口
* 可用硬件和软件方式处理DirectDrawSurface
* 只能用用软件方式处理调色位图
* 支持显示位深为16Bit或32Bit
*
* Author : 风间苍月(TuQbasic)
* Email : tuqbasic@sohu.com
*
* Create : 2004.02.03
* LastChange : 2004.02.12
*
* History :
********************************************************************/
#pragma once
/*
#include <ddraw.h>
#include <d3d8.h>
#include <d3dx8.h>
#include <mmsystem.h>
#pragma comment(lib,"ddraw.lib")
#pragma comment(lib,"d3d8.lib")
#pragma comment(lib,"d3dx8.lib")
#pragma comment(lib,"winmm.lib")
#pragma comment(lib,"dxguid.lib")
*/
#include "hXFile.h"
#include "hPackage.h"
// 锁定的内存指示
typedef struct _IMAGEMEMORY
{
unsigned long lineSize; // 每条扫描线的字节长度
unsigned long lineCount; // 扫描线数目
unsigned long lPitch; // 扫描线间距
unsigned long bitcount; // 像素位深
unsigned long colorkey; // 一像素关键色值
unsigned char *pMemory; // 锁定的第一个像素内存指针
}IMAGEMEMORY;
// 存储位置标志(显存/内存)
#define TYPE_MEMORY 0xF0000000
#define TYPE_VIDEOMEMORY 0x0F000000
// 图片文件映像类型
#define IMAGE_BMP 0x1
#define IMAGE_JPG 0x2
#define IMAGE_TGA 0x3
#define IMAGE_TIF 0x4
#define IMAGE_PCX 0x5
#define IMAGE_PNG 0x6
#define IMAGE_BLP 0x7
// Gamma设置标志
#define GAMMA_R 0x0F00
#define GAMMA_G 0x00F0
#define GAMMA_B 0x000F
#define GAMMA_RGB 0x0FFF
// 默认饱和衰减操作数
#define COLORHALF 0x808080
#define zRGB(r, g, b) ((((long)r) << 16) | (((long)g) << 8) | (b))
#define xRGB(r, g, b) (0xFF000000 | (((long)r) << 16) | (((long)g) << 8) | (b))
#define aRGB(a, r, g, b) (((long)a << 24) | (((long)r) << 16) | (((long)g) << 8) | (b))
// ************************************************************************************
// *-------------------------------图形绘制接口----------------------------------------
class IBasicGraphic : public ITUnknown
{
public:
virtual ~IBasicGraphic(void) {}
// 绘图前调用该函数初始化
virtual bool BeginPaint(void) = 0;
// 绘图完毕后调用该函数
virtual void EndPaint(void) = 0;
// 获取一个像素点的颜色,返回一个ARGB值
virtual DWORD GetPixel(unsigned int x, unsigned int y) = 0;
// 设置一个像素点的颜色,DWORD为一个RGB值
virtual void SetPixelV(unsigned int x, unsigned int y, DWORD dwColor) = 0;
};
typedef IBasicGraphic * LPI_BASICGRAPHIC;
// ************************************************************************************
// *--------------------------------图像处理接口---------------------------------------
class IBasicFilter : public ITUnknown
{
public:
virtual ~IBasicFilter(void) {}
// -----------------------------图像处理(需要MMX支持)----------------------------
// 用指定颜清除源矩形
virtual bool ClearImage(DWORD dwColor = 0L, RECT *rect= NULL) = 0;
// 将源矩形内的颜色通道作衰减,dwColor指定一个ARGB值
virtual bool AttenuationImage(RECT * rect= NULL, DWORD dwColor= COLORHALF, bool bIsColorKey= false) = 0;
// 将源矩形内的颜色通道作加强,dwColor指定一个ARGB值
virtual bool AdditiveImage(RECT * rect= NULL, DWORD dwColor= COLORHALF, bool bIsColorKey= false) = 0;
// 将源矩形内的内容灰度化
virtual bool GrayImage(RECT * rect= NULL, bool bIsColorKey= false) = 0;
// 将源矩形内的内容伪灰度化
virtual bool GrayImageEx(RECT * rect= NULL, bool bIsColorKey= false) = 0;
// 将源矩形内的内容反色
virtual bool InvertImage(RECT * rect= NULL, bool bIsColorKey= false) = 0;
// 将源矩形内的内容水平翻转
virtual bool TurnImageX(RECT * rect= NULL) = 0;
// 将源矩形内的内容垂直翻转
virtual bool TurnImageY(RECT * rect= NULL) = 0;
// 将源矩形内的内容水平+垂直翻转
virtual bool TurnImageXY(RECT * rect= NULL) = 0;
};
typedef IBasicFilter * LPI_BASEFILTER;
// ************************************************************************************
// *--------------------------------基础图像接口---------------------------------------
class IBasicImage : public ITUnknown
{
public:
virtual ~IBasicImage(void) {}
// 设置图像的关键色,clr为一个ZRGB值
virtual bool SetColorKey(DWORD clr) = 0;
// 获取图像的关键色,返回一个ZRGB值
virtual DWORD GetColorKey(void) = 0;
// 获取图像像素尺寸和每个象素的位深
virtual long GetWidth(void) = 0;
virtual long GetHeight(void) = 0;
virtual long GetBitsDepth(void) = 0;
// 获取存储位置(显存TYPE_VIDEOMEMORY/内存 TYPE_MEMORY)
virtual long GetMemoryType(void) = 0;
// 锁定图像中的一个矩形区域,该区域会被裁减,
// 得到的是实际裁减后矩形的内存
// 如果锁定失败或裁减后无矩形返回false
virtual bool LockImage(IMAGEMEMORY *pImgM, RECT *rect= NULL) = 0;
// 释放锁定的图像
virtual bool UnlockImage(void) = 0;
// 将图像一部分保存为位图
virtual bool SaveImageAsBMP(const char* szFileName, RECT *rect= NULL) = 0;
// 获取单目过滤器
virtual LPI_BASEFILTER GetFilter(void) = 0;
// 得到图形绘制接口
virtual LPI_BASICGRAPHIC GetGraphic(void) = 0;
};
typedef IBasicImage * LPI_BASICIMAGE;
// ************************************************************************************
// *---------------调色板图像,调色板图像的调色板是一个宽不小于256的BaseImage----------
// *--------------------图像取调色板中的一根扫描线的内容作为像素颜色-------------------
class IIndexImage : public IBasicImage
{
public:
virtual ~IIndexImage(void) {}
// 获取调色板图像
virtual LPI_BASICIMAGE GetPalette(void) = 0;
// 设置调色板图像,成功则返回true并将数据扫描线定位在0线
virtual bool SetPalette(LPI_BASICIMAGE pImage) = 0;
// 获取调色板数据在调色板图像中的Y轴坐标
virtual long GetIndexLine(void) = 0;
// 获取调色板数据在调色板图像中的Y轴坐标,成功返回true
virtual bool SetIndexLine(long lIndexLine) = 0;
// 锁定和释放调色板图像的数据扫描线
virtual bool LockPalette(IMAGEMEMORY *pImgM) = 0;
virtual bool UnlockPalette(void) = 0;
};
typedef IIndexImage * LPI_INDEXIMAGE;
// ************************************************************************************
// *--------------------------DirectSurface7接口---------------------------------------
class IDXSurface : public IBasicImage
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -