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

📄 img2rgn.h

📁 通过手机数据线连接手机
💻 H
字号:
#ifndef _IMG2RGN_H
#define _IMG2RGN_H

#include "jwfcx.h"

class JWX_EXT_CLASS CImg2Rgn
{
public:
	CImg2Rgn();
	~CImg2Rgn();
	//取得所设的BMP中的区域
	BOOL GetRgn( CRgn & rgn );
	//将给定的BMP内容转到自己的数组中
	void SetBMP( CBitmap * pBMP );
	//将一个二维的字节数组绑定到本对象,
	//在GetRgn时,必须保证绑定的pData有效
	void AttachData( LPVOID pData, long width, long height );

/*关于m_clrMask及其相关说明:
m_clrMask指定要透明的像素,即,除此值以外的像素会被看作是一个区域
缺省值为RGB( 255, 0, 255 )
本类目前功能并不十分完善,要求输入的BMP符合下列条件:
1、要取出的区域必须是连通的,如果有两个以上的非m_clrMask像素区域,
则只有一个会被转化为区域并取出,另一个将丢失
2、连通区域的宽度要在两像素以上,否则区域会出现错误
3、被完全包含在非m_clrMask区域中m_clrMask像素会被作为一般像素处理,不能透明
*/
COLORREF m_bmpMaskClr;

//在内部描述图像的单元值
unsigned char m_cMask;
unsigned char m_cIMG;
unsigned char m_cMark;

protected:
	//追加一个点
	void AddPoint( POINT point );
	//重设链点记录区的大小
	void ResizePoint( long newSize );
	//测试给定的点是否是区域边界
	BOOL IsBoundary( POINT point );
	//找到与point相连的下一个边界点
	BOOL FindNextPoint( POINT & point );

	//取得所有的边界链点
	BOOL GetBoundaryPoint();

	//回逆链点,GetBoundaryPoint()搜索到只有一个像素宽的地方时就无法
	//继续,这时可用本函数沿已搜到的链点回逆,如果返回真值,表示找到
	//一个点,沿此点GetBoundaryPoint()可继续前进,如果返回假值,表示
	//已回逆到起点且与起点相连的点已无搜索的必要
	BOOL PrevPoint( POINT & point );

	//删除位图数据块
	void FreeImgData();
	unsigned char GetCell( POINT & point)
	{
		return m_pImgData[ point.x + point.y*m_bmWidth ];
	};
	void SetCell( POINT & point, unsigned char value )
	{
		m_pImgData[ point.x + point.y*m_bmWidth ] = value;
	};

LPPOINT m_pPoint;	//记录边界链点的数据块
long m_pointGrow;	//链点每次增长的幅度,视不同的应用,可设为不同值以提高AddPoint()的效率
long m_pointSize;	//已分配的链点数据块大小
long m_curPointID;	//记录未使用的最小单元ID
long m_bmWidth, m_bmHeight;	//BMP的高和宽
unsigned char * m_pImgData;	//BMP的MASK映像
BOOL m_isAttachData;
};

#endif

⌨️ 快捷键说明

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