📄 drawminutia.cpp
字号:
#include "stdafx.h"
#include "drawminutia.h"
#include "windowsx.h"
#include "math.h"
COLORREF MinutiaColor1,MinutiaColor2,MinutiaColor3;
COLORREF MinutiaDirection1,MinutiaDirection2,MinutiaDirection3;
COLORREF MainCenterColor,MainCenterDirection;
COLORREF AidCenterColor,AidCenterDirection;
COLORREF LeftDeltaColor,LeftDeltaDirection;
COLORREF RightDeltaColor,RightDeltaDirection;
short MinutiaRadius = 2,MinutiaLen = 5,CenterDeltaRadius = 5,CenterDeltaLen = 7;
void DrawMinutia(
HWND hWnd, //父窗口句柄
CDC *pDC, //父窗口DC
short x, //图象的位置(相对于父窗口的左上角)
short y,
short ShowWidth, //显示的宽度
short ShowHeight, //显示的高度
unsigned char *lpImage, //256灰度的图象数据
short ImageWidth, //图象的实际宽度
short ImageHeight, //图象的实际高度
short MinutiaNum1, //特征点个数
MINUTIASTRU *lpMinutia1, //特征点结构数组
short MinutiaNum2,
MINUTIASTRU *lpMinutia2,
short MinutiaNum3,
MINUTIASTRU *lpMinutia3,
CENTER *lpMainCenter, //主中心结构指针
CENTER *lpAidCenter, //副中心结构指针
DELTA *lpLeftDelta, //左三角结构指针
DELTA *lpRightDelta, //右三角结构指针
bool whetherDraw //true,显示特征点和中心三角;false 不显示
)
{
MinutiaColor1 = RGB(255,0,0);
MinutiaColor2 = RGB(255,0,255);
MinutiaColor3 = RGB(0,255,255);
MinutiaDirection1 = RGB(0,255,0);
MinutiaDirection2 = RGB(255,255,0);
MinutiaDirection3 = RGB(0,0,255);
MainCenterColor = RGB(255,0,0);
MainCenterDirection = RGB(255,255,0);
AidCenterColor = RGB(255,128,0);
AidCenterDirection = RGB(0,255,255);
LeftDeltaColor = RGB(0,0,255);
LeftDeltaDirection = RGB(0,255,255);
RightDeltaColor = RGB(0,255,0);
RightDeltaDirection = RGB(0,255,255);
//画位图
pDC->SetMapMode(MM_TEXT);
if (whetherDraw)
{
int i;
//画特征点1
for (i=0 ;i<MinutiaNum1;i++)
{ Draw_Direction_Round(hWnd,pDC,(lpMinutia1+i)->x,(lpMinutia1+i)->y,(lpMinutia1+i)->direction,x,y,ShowWidth,ShowHeight,ImageWidth,ImageHeight,MinutiaDirection1,MinutiaColor1,TRUE);}
//画特征点2
for (i=0 ;i<MinutiaNum2;i++)
{ Draw_Direction_Round(hWnd,pDC,(lpMinutia2+i)->x,(lpMinutia2+i)->y,(lpMinutia2+i)->direction,x,y,ShowWidth,ShowHeight,ImageWidth,ImageHeight,MinutiaDirection2,MinutiaColor2,TRUE);}
//画特征点3
for (i=0 ;i<MinutiaNum3;i++)
{ Draw_Direction_Round(hWnd,pDC,(lpMinutia3+i)->x,(lpMinutia3+i)->y,(lpMinutia3+i)->direction,x,y,ShowWidth,ShowHeight,ImageWidth,ImageHeight,MinutiaDirection3,MinutiaColor3,TRUE);}
//画主中心
if(lpMainCenter)
Draw_Direction_Round(hWnd,pDC,lpMainCenter->x,lpMainCenter->y,lpMainCenter->direction,x,y,ShowWidth,ShowHeight,ImageWidth,ImageHeight,MainCenterDirection,MainCenterColor,FALSE);
//画主副心
if(lpAidCenter)
Draw_Direction_Round(hWnd,pDC,lpAidCenter->x,lpAidCenter->y,lpAidCenter->direction,x,y,ShowWidth,ShowHeight,ImageWidth,ImageHeight,AidCenterDirection,AidCenterColor,FALSE);
//画左三角
if(lpLeftDelta)
Draw_Direction_Round(hWnd,pDC,lpLeftDelta->x,lpLeftDelta->y,lpLeftDelta->direction,x,y,ShowWidth,ShowHeight,ImageWidth,ImageHeight,LeftDeltaDirection,LeftDeltaColor,FALSE);
//画右三角
if(lpRightDelta)
Draw_Direction_Round(hWnd,pDC,lpRightDelta->x,lpRightDelta->y,lpRightDelta->direction,x,y,ShowWidth,ShowHeight,ImageWidth,ImageHeight,RightDeltaDirection,RightDeltaColor,FALSE);
}
}
void Draw_Direction_Round(
HWND hWnd, //父窗口句柄
CDC *pDC, //父窗口DC
short Point_X, //标志点位置(相对于图象的左下角)
short Point_Y,
short Point_Direction,//标志点方向
short x, //图象的位置(相对于父窗口的左上角)
short y,
short ShowWidth, //显示的宽度
short ShowHeight, //显示的高度
short ImageWidth, //图象的实际宽度
short ImageHeight, //图象的实际高度
COLORREF DirectionColor, //标志点方向的颜色
COLORREF MinutianColor, //标志点圆圈的颜色
BOOL Have_Brush //true 是画实心,false是画空心
)
{
MINUTIASTRU *my_lpMinutia;
double Point_Arc;
CPen* pOldPen;
CBrush* pOldBrush;
CPen newPen_Line,newPen_Round;
CBrush newBrush_Round;
my_lpMinutia = (MINUTIASTRU *)LocalAlloc ( GMEM_FIXED|GMEM_ZEROINIT,sizeof(MINUTIASTRU) );
//画方向
my_lpMinutia->x = x+short(Point_X*ShowWidth/ImageWidth);
my_lpMinutia->y = y+ShowHeight-short(Point_Y*ShowHeight/ImageHeight);
Point_Arc = double(Point_Direction)/57.295;//10000;
newPen_Line.CreatePen( PS_SOLID, 2, DirectionColor ) ;
pOldPen = pDC->SelectObject( &newPen_Line );
if (Have_Brush)
{
MinutiaRadius++;
pDC->MoveTo(my_lpMinutia->x + short(MinutiaRadius * cos(Point_Arc)) ,my_lpMinutia->y - short(MinutiaRadius * sin(Point_Arc)));
pDC->LineTo(my_lpMinutia->x + short((MinutiaLen+MinutiaRadius) * cos(Point_Arc)) ,my_lpMinutia->y - short((MinutiaLen+MinutiaRadius) * sin(Point_Arc)));
MinutiaRadius--;
}
else
{
CenterDeltaRadius++;
pDC->MoveTo(my_lpMinutia->x + short((CenterDeltaRadius) * cos(Point_Arc)) ,my_lpMinutia->y - short((CenterDeltaRadius) * sin(Point_Arc)));
pDC->LineTo(my_lpMinutia->x + short((CenterDeltaLen+CenterDeltaRadius) * cos(Point_Arc)) ,my_lpMinutia->y- short((CenterDeltaLen+CenterDeltaRadius) * sin(Point_Arc)));
CenterDeltaRadius--;
}
pDC->SelectObject( pOldPen );
newPen_Line.DeleteObject() ;
//画圆
newPen_Round.CreatePen( PS_SOLID, 2, MinutianColor ) ;
pOldPen = pDC->SelectObject( &newPen_Round );
if (Have_Brush)
{
newBrush_Round.CreateSolidBrush( MinutianColor ) ;
pOldBrush = pDC->SelectObject( &newBrush_Round );
pDC->Ellipse(my_lpMinutia->x - MinutiaRadius , my_lpMinutia->y - MinutiaRadius , my_lpMinutia->x + MinutiaRadius , my_lpMinutia->y +MinutiaRadius);
pDC->SelectObject( pOldBrush );
newBrush_Round.DeleteObject() ;
}
else
{
pDC->SelectStockObject( NULL_BRUSH );
pDC->Ellipse(my_lpMinutia->x - CenterDeltaRadius , my_lpMinutia->y - CenterDeltaRadius , my_lpMinutia->x + CenterDeltaRadius , my_lpMinutia->y +CenterDeltaRadius);
}
pDC->SelectObject( pOldPen );
newPen_Round.DeleteObject() ;
LocalFree(my_lpMinutia);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -