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