?? imagenview.cpp
字號:
ColorSobel(pImg[1],pImg[0],2);
WorkCanvusToWindow();
}
void CImageNView::On2DimensionCombine()
{
CClientDC dc(this);
struct IMAGEPARAMENT P;
RGBQUAD ColorTab[256];
WORD two_dim[128][128];
BYTE *buf,buf1[256],*buf0;
int i,j,m,t,dp;
long pg[256];
char *textbuf[]={"H","S","V","0" };
ClearWindow(1);
GetImageParament(pImg[0],&P);
pImg[2]->Destroy();
pImg[2]->Create(256+5,256+5,8,0);
buf =(BYTE*) malloc(P.nBytesPerLine);
buf0=(BYTE*) malloc(P.nBytesPerLine);
for (i=0;i<128;i++) {
for (j=0;j<128;j++) {
two_dim[i][j]=0;
}
}
for (i=0;i<P.nHeight;i++) {
GetRectValue(pImg[0],0,i,P.nWidth,1,buf);
for (j=0,m=0;j<P.nWidth;j++,m+=P.nBytesPerPixel)
buf0[j]=(BYTE) (0.11*buf[m]+0.59*buf[m+1]+0.30*buf[m+2]);
RgbToHsv(buf,buf,P.nWidth);
for (j=0,m=0;j<P.nWidth;j++,m+=P.nBytesPerPixel) {
two_dim[(255-buf[m+1])/2][buf[m]/2]++;
}
}
for (j=0;j<256;j++) pg[j]=0;
for (j=0;j<128;j++) {
for (i=0;i<128;i++) pg[2*j]+=two_dim[i][j];
}
dp=HueHistogShift(pg)/2;
for (i=0;i<128;i++) {
for (j=0;j<128;j++) {
t=two_dim[i][j];
if (t>255) t=255;
buf1[(j-dp+128)%128]=t;
}
SetRectValue(pImg[2],128+5,i,128,1,buf1);
}
PsendoColor(ColorTab);
SetAllPalette(pImg[2],ColorTab);
RectFillValue(pImg[2],0,128,256+5,5,32);
RectFillValue(pImg[2],128,0,5,256+5,32);
RectFillValue(pImg[2],128+5+(0-dp+128)%128,128,1,5,255);
RectFillValue(pImg[2],128+5+(43-dp+128)%128,128,1,5,128);
RectFillValue(pImg[2],128+5+(85-dp+128)%128,128,1,5,0);
for (i=0;i<128;i++) {
for (j=0;j<128;j++) {
two_dim[i][j]=0;
}
}
for (i=0;i<P.nHeight;i++) {
GetRectValue(pImg[0],0,i,P.nWidth,1,buf);
for (j=0,m=0;j<P.nWidth;j++,m+=P.nBytesPerPixel)
buf0[j]=(BYTE) (0.11*buf[m]+0.59*buf[m+1]+0.30*buf[m+2]);
RgbToHsv(buf,buf,P.nWidth);
for (j=0,m=0;j<P.nWidth;j++,m+=P.nBytesPerPixel) {
two_dim[buf0[j]/2][buf[m]/2]++;
}
}
for (i=0;i<128;i++) {
for (j=0;j<128;j++) {
t=two_dim[i][j];
if (t>255) t=255;
buf1[(j-dp+128)%128]=t;
}
SetRectValue(pImg[2],128+5,128+5+i,128,1,buf1);
}
for (i=0;i<128;i++) {
for (j=0;j<128;j++) {
two_dim[i][j]=0;
}
}
for (i=0;i<P.nHeight;i++) {
GetRectValue(pImg[0],0,i,P.nWidth,1,buf);
for (j=0,m=0;j<P.nWidth;j++,m+=P.nBytesPerPixel)
buf0[j]=(BYTE) (0.11*buf[m]+0.59*buf[m+1]+0.30*buf[m+2]);
RgbToHsv(buf,buf,P.nWidth);
for (j=0,m=0;j<P.nWidth;j++,m+=P.nBytesPerPixel) {
two_dim[(255-buf[m+1])/2][(255-buf0[j])/2]++;
}
}
free(buf);
free(buf0);
for (i=0;i<128;i++) {
for (j=0;j<128;j++) {
t=two_dim[i][j];
if (t>255) t=255;
buf1[j]=t;
}
SetRectValue(pImg[2],0,i,128,1,buf1);
}
pImg[2]->BitBlt(dc,P.nWidth+40,40,256,256+5,0,0,SRCCOPY);
dc.TextOut(P.nWidth+40+265,40+118,textbuf[0],lstrlen(textbuf[0]));
dc.TextOut(P.nWidth+40+124,18,textbuf[1],lstrlen(textbuf[1]));
dc.TextOut(P.nWidth+20,40+118,textbuf[2],lstrlen(textbuf[2]));
dc.TextOut(P.nWidth+40+124,40+262,textbuf[2],lstrlen(textbuf[2]));
dc.TextOut(P.nWidth+20+139,40+118+15,textbuf[3],lstrlen(textbuf[3]));
}
void CImageNView::OnIndexImage()
{
struct IMAGEPARAMENT P;
CString str1;
GetImageParament(pImg[0],&P);
if (P.nBitCount>8)
TrueColorToIndex(pImg[0],pImg[0]);
else
LowTypeToIndex(pImg[0],pImg[0]);
ImageCopy(pImg[1],pImg[0]);
str1.Format(" 的索引圖像");
WriteTitle(pImg[1],m_FileName,str1);
WorkCanvusToWindow();
}
void CImageNView::SelectDirection(int n)
{
CWnd* pMain = AfxGetMainWnd();
CMenu* pMenu = pMain->GetMenu();
nDirectionNo=n;
for (int i=0;i<9;i++)
pMenu->CheckMenuItem(ID_DIRECTION_NO0+i,MF_UNCHECKED);
pMenu->CheckMenuItem(ID_DIRECTION_NO0+n,MF_CHECKED);
}
void CImageNView::OnDirectionNo0()
{
SelectDirection(0);
}
void CImageNView::OnDirectionNo1()
{
SelectDirection(1);
}
void CImageNView::OnDirectionNo2()
{
SelectDirection(2);
}
void CImageNView::OnDirectionNo3()
{
SelectDirection(3);
}
void CImageNView::OnDirectionNo4()
{
SelectDirection(4);
}
void CImageNView::OnDirectionNo5()
{
SelectDirection(5);
}
void CImageNView::OnDirectionNo6()
{
SelectDirection(6);
}
void CImageNView::OnDirectionNo7()
{
SelectDirection(7);
}
void CImageNView::OnDirectionNo8()
{
SelectDirection(8);
}
void CImageNView::OnSaveMask()
{
ImageCopy(pImg[8],pImg[1]);
if (pImg[8]->GetBPP()>1)
IndexToLowType(pImg[8],pImg[8]);
}
void CImageNView::OnSaveMaskA()
{
ClearWindow(0);
AdjustAreaType(pImg[1]);
OnSaveMask();
}
void CImageNView::OnRemoveBackgrond()
{
RemoveBackgrond(pImg[8],pImg[1]);
WorkCanvusToWindow();
}
void CImageNView::OnSaveAddImage()
{
ImageCopy(pImg[7],pImg[1]);
}
void CImageNView::OnAddImage()
{
struct IMAGEPARAMENT P;
GetImageParament(pImg[1],&P);
AddImage(pImg[1],pImg[7]);
WorkCanvusToWindow();
}
void CImageNView::OnSobelRgb()
{
CWnd* pMain = AfxGetMainWnd();
CMenu* pMenu = pMain->GetMenu();
nSobelFlag=0;
for (int i=0;i<3;i++)
pMenu->CheckMenuItem(ID_SOBEL_RGB+i,MF_UNCHECKED);
pMenu->CheckMenuItem(ID_SOBEL_RGB+nSobelFlag,MF_CHECKED);
}
void CImageNView::OnSobelYiq()
{
CWnd* pMain = AfxGetMainWnd();
CMenu* pMenu = pMain->GetMenu();
nSobelFlag=1;
for (int i=0;i<3;i++)
pMenu->CheckMenuItem(ID_SOBEL_RGB+i,MF_UNCHECKED);
pMenu->CheckMenuItem(ID_SOBEL_RGB+nSobelFlag,MF_CHECKED);
}
void CImageNView::OnSobelLab()
{
CWnd* pMain = AfxGetMainWnd();
CMenu* pMenu = pMain->GetMenu();
nSobelFlag=2;
for (int i=0;i<3;i++)
pMenu->CheckMenuItem(ID_SOBEL_RGB+i,MF_UNCHECKED);
pMenu->CheckMenuItem(ID_SOBEL_RGB+nSobelFlag,MF_CHECKED);
}
void CImageNView::OnImageY()
{
ToYIQLAB(pImg[1],pImg[0],0);
WorkCanvusToWindow();
}
void CImageNView::OnImageI()
{
ToYIQLAB(pImg[1],pImg[0],1);
WorkCanvusToWindow();
}
void CImageNView::OnImageQ()
{
ToYIQLAB(pImg[1],pImg[0],2);
WorkCanvusToWindow();
}
void CImageNView::OnImageL()
{
ToYIQLAB(pImg[1],pImg[0],3);
WorkCanvusToWindow();
}
void CImageNView::OnImageA()
{
ToYIQLAB(pImg[1],pImg[0],4);
WorkCanvusToWindow();
}
void CImageNView::OnImageB()
{
ToYIQLAB(pImg[1],pImg[0],5);
WorkCanvusToWindow();
}
void CImageNView::OnContourTracking()
{
CString str1;
ClearWindow(0);
ContourTracking(pImg[1]);
SetDefaultPalette(pImg[1]);
str1.Format(" 的索引圖像");
WriteTitle(pImg[1],m_FileName,str1);
WorkCanvusToWindow();
}
void CImageNView::OnAreaParamentMeasure()
{
ClearWindow(0);
m_nFlag=ID_AREA_PARAMENT_MEASURE;
}
void CImageNView::OnMakeMask()
{
ClearWindow(0);
m_nFlag=ID_MAKE_MASK;
m_nMaskF=0;
}
void CImageNView::OnLineCoding()
{
CString str1;
ClearWindow(0);
LineCode(pImg[1]);
SetDefaultPalette(pImg[1]);
str1.Format(" 的索引圖像");
WriteTitle(pImg[1],m_FileName,str1);
WorkCanvusToWindow();
}
void CImageNView::OnAreaMeasure()
{
ClearWindow(1);
m_nFlag=ID_AREA_MEASURE;
}
void CImageNView::OnSearchAreaKernel()
{
struct IMAGEPARAMENT P;
CClientDC dc(this);
CString str="區域數";
int n;
ClearWindow(0);
n=SearchAreaKernel(pImg[1]);
WorkCanvusToWindow();
GetImageParament(pImg[1],&P);
dc.SelectStockObject(WHITE_PEN);
dc.SelectStockObject(WHITE_BRUSH);
dc.Rectangle(P.nWidth+10,0,1023,624);
dc.TextOut(P.nWidth+50,40,str);
str.Format("%d",n);
dc.TextOut(P.nWidth+150,40,str);
}
void CImageNView::OnLimitErosion()
{
ClearWindow(0);
ShowCursor(FALSE);
LimitErosion(pImg[1]);
ShowCursor(TRUE);
WorkCanvusToWindow();
}
void CImageNView::OnConditionDilation()
{
ShowCursor(FALSE);
ConditionDilation(pImg[8],pImg[1]);
ShowCursor(TRUE);
WorkCanvusToWindow();
}
void CImageNView::OnAutomaticSelect()
{
CWnd* pMain = AfxGetMainWnd();
CMenu* pMenu = pMain->GetMenu();
nTrackFlag=0;
for (int i=0;i<3;i++)
pMenu->CheckMenuItem(ID_AUTOMATIC_SELECT+i,MF_UNCHECKED);
pMenu->CheckMenuItem(ID_AUTOMATIC_SELECT+nTrackFlag,MF_CHECKED);
}
void CImageNView::OnWhiteArea()
{
CWnd* pMain = AfxGetMainWnd();
CMenu* pMenu = pMain->GetMenu();
nTrackFlag=1;
for (int i=0;i<3;i++)
pMenu->CheckMenuItem(ID_AUTOMATIC_SELECT+i,MF_UNCHECKED);
pMenu->CheckMenuItem(ID_AUTOMATIC_SELECT+nTrackFlag,MF_CHECKED);
}
void CImageNView::OnBlackArea()
{
CWnd* pMain = AfxGetMainWnd();
CMenu* pMenu = pMain->GetMenu();
nTrackFlag=2;
for (int i=0;i<3;i++)
pMenu->CheckMenuItem(ID_AUTOMATIC_SELECT+i,MF_UNCHECKED);
pMenu->CheckMenuItem(ID_AUTOMATIC_SELECT+nTrackFlag,MF_CHECKED);
}
//-------------------------------------------------------------
void CImageNView::OnLButtonDown(UINT nFlags, CPoint point)
{
if ((m_nFlag == ID_MAKE_MASK)&&(m_nMaskF==0)) {
m_nStartX = m_nMaskX = point.x;
m_nStartY = m_nMaskY = point.y;
m_nMaskF=1;
MakeMask(point.x,point.y,0);
}
CView::OnLButtonDown(nFlags, point);
}
void CImageNView::OnMouseMove(UINT nFlags, CPoint point)
{
CClientDC dc(this);
CPen penPen(PS_SOLID,1,RGB(255,0,192)),*pOldPen;
if ((m_nFlag == ID_MAKE_MASK)&&(m_nMaskF==1)) {
pOldPen = dc.SelectObject(&penPen);
dc.MoveTo(m_nMaskX,m_nMaskY);
dc.LineTo(point.x,point.y);
dc.SelectObject(pOldPen);
penPen.DeleteObject();
m_nMaskX = point.x;
m_nMaskY = point.y;
MakeMask(point.x,point.y,1);
}
CView::OnMouseMove(nFlags, point);
}
void CImageNView::OnLButtonUp(UINT nFlags, CPoint point)
{
struct IMAGEPARAMENT P;
CClientDC dc(this);
CPen penPen(PS_SOLID,1,RGB(255,0,192)),*pOldPen;
int i,per,ar;
double fac;
char *textbuf[]={"周長","面積","形狀參數" };
CString str;
GetImageParament(pImg[1],&P);
if ((m_nFlag == ID_AREA_PARAMENT_MEASURE)||
(m_nFlag == ID_AREA_MEASURE)) {
dc.SelectStockObject(WHITE_PEN);
dc.SelectStockObject(WHITE_BRUSH);
dc.Rectangle(P.nWidth+10,0,1023,624);
dc.SetTextColor(RGB(0,0,0));
for (i=0;i<3;i++)
dc.TextOut(P.nWidth+50,40+25*i,textbuf[i]);
if (m_nFlag==ID_AREA_PARAMENT_MEASURE) {
ar=ParamentMeasure(pImg[1],point,1,&per,&fac);
WorkCanvusToWindow();
str.Format("%d",per);
dc.TextOut(P.nWidth+150,40,str);
str.Format("%5.2lf",fac);
dc.TextOut(P.nWidth+150,90,str);
}
else if (m_nFlag==ID_AREA_MEASURE) {
ar=ParamentMeasure(pImg[1],point,2,&per,&fac);
WorkCanvusToWindow();
}
str.Format("%d",ar);
dc.TextOut(P.nWidth+150,65,str);
}
else if ((m_nFlag == ID_MAKE_MASK)&&(m_nMaskF==1)) {
pOldPen = dc.SelectObject(&penPen);
dc.MoveTo(point.x,point.y);
dc.LineTo(m_nStartX,m_nStartY);
dc.SelectObject(pOldPen);
penPen.DeleteObject();
m_nFlag=0;
MakeMask(point.x,point.y,2);
CreateMaskImage(pImg[6]);
pImg[6]->BitBlt(dc,P.nWidth+20,20,pImg[6]->GetWidth(),
pImg[6]->GetHeight(),0,0,SRCCOPY);
}
CView::OnLButtonUp(nFlags, point);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -