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

📄 hgraphic2d.h

📁 通过使机器人进行简单的图像识别
💻 H
📖 第 1 页 / 共 2 页
字号:
/********************************************************************
*
* =-----------------------------------------------------------------=
* =                          ____          _________                =
* =                         / _  \         \___  __/                =
* =                        / /_/ /     ____   / /                   =
* =                       /  _   \ ● / _  \ / /                    =
* =                      /  /_/  // // / / // /                     =
* =                      \______//_//_/ /_//_/                      =
* =                                                                 =
* =             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 + -