?? 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 + -