📄 imagenview.cpp
字号:
void CImageNView::OnGinnerBorder()
{
GMorphologic(pImg[2],pImg[1],6);
WorkCanvusToWindow();
}
void CImageNView::OnGouterBorder()
{
GMorphologic(pImg[2],pImg[1],7);
WorkCanvusToWindow();
}
void CImageNView::OnGrayTophat()
{
GMorphologic(pImg[2],pImg[1],8);
WorkCanvusToWindow();
}
void CImageNView::OnBlackGrayTophat()
{
GMorphologic(pImg[2],pImg[1],9);
WorkCanvusToWindow();
}
void CImageNView::OnProjection()
{
struct IMAGEPARAMENT P;
int Tab[2048];
CClientDC dc(this);
OnRefresh();
GetImageParament(pImg[1],&P);
Projection(pImg[1],Tab,0);
CreateProjection(pImg[2],Tab,P.nHeight,0);
pImg[2]->BitBlt(dc,P.nWidth,0,256+2,P.nHeight,0,0,SRCCOPY);
Projection(pImg[1],Tab,1);
CreateProjection(pImg[2],Tab,P.nWidth,1);
pImg[2]->BitBlt(dc,0,P.nHeight,P.nWidth,256+2,0,0,SRCCOPY);
}
void CImageNView::OnImageHistogram()
{
struct IMAGEPARAMENT P;
int x,y,h,n,s,t;
long pg[256];
CClientDC dc(this);
ClearWindow(1);
GetImageParament(pImg[1],&P);
Histogram(pImg[1],0,0,P.nWidth,P.nHeight,pg);
x=P.nWidth+10;
y=40;
h=120;
n=180;
s=256;
t=20;
CreateHistogram(pImg[2],pg,h,0,0);
pImg[2]->BitBlt(dc,x,y,s+20,h+20,0,0,SRCCOPY);
CreateColorStrip(pImg[2],pImg[0],s,t);
pImg[2]->BitBlt(dc,x+9,y+135,s+2,t+2,0,0,SRCCOPY);
HistogSmooth(pg,10);
CreateHistogram(pImg[2],pg,h,0,0);
pImg[2]->BitBlt(dc,x,y+n,s+20,h+20,0,0,SRCCOPY);
CreateHistogram(pImg[2],pg,h,1,0);
pImg[2]->BitBlt(dc,x,y+2*n,s+20,h+20,0,0,SRCCOPY);
}
void CImageNView::OnImageInvert()
{
ImageInvert(pImg[1]);
WorkCanvusToWindow();
}
void CImageNView::OnHistogramType()
{
struct IMAGEPARAMENT P;
int x,y,h,s;
CClientDC dc(this);
ClearWindow(1);
GetImageParament(pImg[1],&P);
x=P.nWidth+10;
y=40;
h=120;
s=256;
CreateHistogramA(pImg[2],pImg[1],h,1);
pImg[2]->BitBlt(dc,x,y,s+20,h+50,0,0,SRCCOPY);
}
void CImageNView::OnImageHue()
{
ToHSV(pImg[1],pImg[0],0);
WorkCanvusToWindow();
}
void CImageNView::OnImageSaturation()
{
ToHSV(pImg[1],pImg[0],1);
WorkCanvusToWindow();
}
void CImageNView::OnImageValue()
{
ToHSV(pImg[1],pImg[0],2);
WorkCanvusToWindow();
}
void CImageNView::OnCircularColorPlanes()
{
CClientDC dc(this);
struct IMAGEPARAMENT P;
int i,j,k,x,y,x1,y1;
BYTE buf[768],hsv[768],*buffer;
ClearWindow(1);
pImg[2]->Create(256,256,24,0);
buffer=pImg[2]->GetPixelAddress(0,255);
memset(buffer,255,256*256*3);
hsv[2]=176;
x1=y1=0;
k=4;
for (i=0;i<360*k;i++) {
hsv[0]=255*i/(360*k);
for (j=100;j>=0;j--) {
x=(int) (128+j*cos(-PI*i/(180*k))+0.5);
y=(int) (128+j*sin(-PI*i/(180*k))+0.5);
if ((x==x1)&&(y==y1)) continue;
hsv[1]=255*j/100;
HsvToRgb(buf,hsv,1);
SetRectValue(pImg[2],x,y,1,1,buf);
x1=x;
y1=y;
}
}
DrawBox(pImg[2],0,0,256,256,1,0);
GetImageParament(pImg[1],&P);
if (pImg[1]->IsNull()) i=0;
else i=P.nWidth;
pImg[2]->BitBlt(dc,i+10,10,256,256,0,0,SRCCOPY);
}
void CImageNView::OnHSPlane()
{
CClientDC dc(this);
struct IMAGEPARAMENT P;
int i,j;
BYTE buf[768],hsv[768];
ClearWindow(1);
pImg[2]->Create(258,258,24,0);
for (j=0;j<256;j++) hsv[3*j]=j;
for (j=0;j<256;j++) hsv[3*j+2]=255;
for (i=0;i<256;i++) {
for (j=0;j<256;j++) hsv[3*j+1]=255-i;
HsvToRgb(buf,hsv,256);
SetRectValue(pImg[2],1,i+1,256,1,buf);
}
DrawBox(pImg[2],0,0,258,258,1,0);
GetImageParament(pImg[1],&P);
if (pImg[1]->IsNull()) i=0;
else i=P.nWidth;
pImg[2]->BitBlt(dc,i+10,10,258,258,0,0,SRCCOPY);
}
void CImageNView::OnSVPlane()
{
CClientDC dc(this);
struct IMAGEPARAMENT P;
int i,j;
BYTE buf[768],hsv[768];
ClearWindow(1);
pImg[2]->Create(258,258,24,0);
for (j=0;j<256;j++) hsv[3*j]=0;
for (j=0;j<256;j++) hsv[3*j+1]=255-j;
for (i=0;i<256;i++) {
for (j=0;j<256;j++) hsv[3*j+2]=255-i;
HsvToRgb(buf,hsv,256);
SetRectValue(pImg[2],1,i+1,256,1,buf);
}
DrawBox(pImg[2],0,0,258,258,1,0);
GetImageParament(pImg[1],&P);
if (pImg[1]->IsNull()) i=0;
else i=P.nWidth;
pImg[2]->BitBlt(dc,i+10,10,258,258,0,0,SRCCOPY);
}
void CImageNView::OnHVPlane()
{
CClientDC dc(this);
struct IMAGEPARAMENT P;
int i,j;
BYTE buf[768],hsv[768];
ClearWindow(1);
pImg[2]->Create(258,258,24,0);
for (j=0;j<256;j++) hsv[3*j]=j;
for (j=0;j<256;j++) hsv[3*j+1]=255;
for (i=0;i<256;i++) {
for (j=0;j<256;j++) hsv[3*j+2]=255-i;
HsvToRgb(buf,hsv,256);
SetRectValue(pImg[2],1,i+1,256,1,buf);
}
DrawBox(pImg[2],0,0,258,258,1,0);
GetImageParament(pImg[1],&P);
if (pImg[1]->IsNull()) i=0;
else i=P.nWidth;
pImg[2]->BitBlt(dc,i+10,10,258,258,0,0,SRCCOPY);
}
void CImageNView::On2DimensionHistogram()
{
CClientDC dc(this);
struct IMAGEPARAMENT P;
RGBQUAD ColorTab[256];
WORD two_dim[256][256];
BYTE *buf,buf1[256];
int i,j,m,t,dp;
long pg[256];
char *textbuf[]={"H","S","V","0" };
ClearWindow(1);
GetImageParament(pImg[0],&P);
buf=(BYTE*) malloc(P.nBytesPerLine);
for (i=0;i<256;i++) {
for (j=0;j<256;j++) {
two_dim[i][j]=0;
}
}
for (i=0;i<P.nHeight;i++) {
GetRectValue(pImg[0],0,i,P.nWidth,1,buf);
RgbToHsv(buf,buf,P.nWidth);
for (j=0,m=0;j<P.nWidth;j++,m+=P.nBytesPerPixel) {
two_dim[255-buf[m+1]][buf[m]]++;
}
}
free(buf);
for (j=0;j<256;j++) pg[j]=0;
for (j=0;j<256;j++) {
for (i=0;i<256;i++) pg[j]+=two_dim[i][j];
}
dp=HueHistogShift(pg);
pImg[2]->Destroy();
pImg[2]->Create(256,256+10,8,0);
for (i=0;i<256;i++) {
for (j=0;j<256;j++) {
t=two_dim[i][j];
if (t>255) t=255;
buf1[(j-dp+256)%256]=t;
}
SetRectValue(pImg[2],0,i,256,1,buf1);
}
PsendoColor(ColorTab);
SetAllPalette(pImg[2],ColorTab);
RectFillValue(pImg[2],0,256,256,10,32);
RectFillValue(pImg[2],(0-dp+256)%256,256,1,10,255);
RectFillValue(pImg[2],(85-dp+256)%256,256,1,10,128);
RectFillValue(pImg[2],(170-dp+256)%256,256,1,10,0);
pImg[2]->BitBlt(dc,P.nWidth+40,40,256,256+10,0,0,SRCCOPY);
dc.TextOut(P.nWidth+40+246,40+270,textbuf[0],lstrlen(textbuf[0]));
dc.TextOut(P.nWidth+22,40,textbuf[1],lstrlen(textbuf[1]));
dc.TextOut(P.nWidth+22,40+240,textbuf[3],lstrlen(textbuf[3]));
dc.TextOut(P.nWidth+36+(0-dp+256)%256,40+270,textbuf[3],lstrlen(textbuf[3]));
}
void CImageNView::On2dimensionHistogramHv()
{
CClientDC dc(this);
struct IMAGEPARAMENT P;
RGBQUAD ColorTab[256];
WORD two_dim[256][256];
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);
buf=(BYTE*) malloc(P.nBytesPerLine);
buf0=(BYTE*) malloc(P.nBytesPerLine);
for (i=0;i<256;i++) {
for (j=0;j<256;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-buf0[j]][buf[m]]++;
}
}
free(buf);
free(buf0);
for (j=0;j<256;j++) pg[j]=0;
for (j=0;j<256;j++) {
for (i=0;i<256;i++) pg[j]+=two_dim[i][j];
}
dp=HueHistogShift(pg);
pImg[2]->Destroy();
pImg[2]->Create(256,256+10,8,0);
for (i=0;i<256;i++) {
for (j=0;j<256;j++) {
t=two_dim[i][j];
if (t>255) t=255;
buf1[(j-dp+256)%256]=t;
}
SetRectValue(pImg[2],0,i,256,1,buf1);
}
PsendoColor(ColorTab);
SetAllPalette(pImg[2],ColorTab);
RectFillValue(pImg[2],0,256,256,10,32);
RectFillValue(pImg[2],(0-dp+256)%256,256,1,10,255);
RectFillValue(pImg[2],(85-dp+256)%256,256,1,10,128);
RectFillValue(pImg[2],(170-dp+256)%256,256,1,10,0);
pImg[2]->BitBlt(dc,P.nWidth+40,40,256,256+10,0,0,SRCCOPY);
dc.TextOut(P.nWidth+40+246,40+270,textbuf[0],lstrlen(textbuf[0]));
dc.TextOut(P.nWidth+22,40,textbuf[2],lstrlen(textbuf[2]));
dc.TextOut(P.nWidth+22,40+240,textbuf[3],lstrlen(textbuf[3]));
dc.TextOut(P.nWidth+36+(0-dp+256)%256,40+270,textbuf[3],lstrlen(textbuf[3]));
}
void CImageNView::On2dimensionHistogramSv()
{
CClientDC dc(this);
struct IMAGEPARAMENT P;
RGBQUAD ColorTab[256];
WORD two_dim[256][256];
BYTE *buf,buf1[256],*buf0;
int i,j,m,t;
char *textbuf[]={"H","S","V","0" };
ClearWindow(1);
GetImageParament(pImg[0],&P);
buf =(BYTE*) malloc(P.nBytesPerLine);
buf0=(BYTE*) malloc(P.nBytesPerLine);
for (i=0;i<256;i++) {
for (j=0;j<256;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]][buf0[j]]++;
}
}
free(buf);
free(buf0);
pImg[2]->Destroy();
pImg[2]->Create(256,256+10,8,0);
for (i=0;i<256;i++) {
for (j=0;j<256;j++) {
t=two_dim[i][j];
if (t>255) t=255;
buf1[j]=t;
}
SetRectValue(pImg[2],0,i,256,1,buf1);
}
PsendoColor(ColorTab);
SetAllPalette(pImg[2],ColorTab);
pImg[2]->BitBlt(dc,P.nWidth+40,40,256,256,0,0,SRCCOPY);
dc.TextOut(P.nWidth+40+246,40+260,textbuf[2],lstrlen(textbuf[2]));
dc.TextOut(P.nWidth+22,40,textbuf[1],lstrlen(textbuf[1]));
dc.TextOut(P.nWidth+22,40+260,textbuf[3],lstrlen(textbuf[3]));
}
void CImageNView::OnRgbHistogram()
{
struct IMAGEPARAMENT P;
int x,y,h,n,s,t;
long pg[256];
CClientDC dc(this);
char *textbuf[]={"","红分量直方图",
"绿分量直方图","蓝分量直方图" };
OnRefresh();
GetImageParament(pImg[0],&P);
x=P.nWidth+10;
y=40;
h=120;
n=180;
s=256;
t=20;
ColorHistogram(pImg[0],0,0,P.nWidth,P.nHeight,pg,3);
CreateHistogram(pImg[2],pg,h,0,0);
pImg[2]->BitBlt(dc,x,y,s+20,h+20,0,0,SRCCOPY);
dc.TextOut(P.nWidth+105,y+140,textbuf[1],lstrlen(textbuf[1]));
ColorHistogram(pImg[0],0,0,P.nWidth,P.nHeight,pg,2);
CreateHistogram(pImg[2],pg,h,0,0);
pImg[2]->BitBlt(dc,x,y+n,s+20,h+20,0,0,SRCCOPY);
dc.TextOut(P.nWidth+105,y+n+140,textbuf[2],lstrlen(textbuf[2]));
ColorHistogram(pImg[0],0,0,P.nWidth,P.nHeight,pg,1);
CreateHistogram(pImg[2],pg,h,0,0);
pImg[2]->BitBlt(dc,x,y+2*n,s+20,h+20,0,0,SRCCOPY);
dc.TextOut(P.nWidth+105,y+2*n+140,textbuf[3],lstrlen(textbuf[3]));
}
void CImageNView::OnHsvHistogram()
{
struct IMAGEPARAMENT P;
int x,y,h,n,s,t,dp;
long pg[256];
CClientDC dc(this);
char *textbuf[]={"","色调直方图",
"饱和度直方图","强度直方图" };
OnRefresh();
GetImageParament(pImg[0],&P);
x=P.nWidth+10;
y=40;
h=120;
n=180;
s=256;
t=20;
dp=ColorHistogram(pImg[0],0,0,P.nWidth,P.nHeight,pg,4);
CreateHistogram(pImg[2],pg,h,0,dp);
pImg[2]->BitBlt(dc,x,y,s+20,h+20,0,0,SRCCOPY);
dc.TextOut(P.nWidth+110,y+140,textbuf[1],lstrlen(textbuf[1]));
ColorHistogram(pImg[0],0,0,P.nWidth,P.nHeight,pg,5);
CreateHistogram(pImg[2],pg,h,0,0);
pImg[2]->BitBlt(dc,x,y+n,s+20,h+20,0,0,SRCCOPY);
dc.TextOut(P.nWidth+105,y+n+140,textbuf[2],lstrlen(textbuf[2]));
ColorHistogram(pImg[0],0,0,P.nWidth,P.nHeight,pg,6);
CreateHistogram(pImg[2],pg,h,0,0);
pImg[2]->BitBlt(dc,x,y+2*n,s+20,h+20,0,0,SRCCOPY);
dc.TextOut(P.nWidth+110,y+2*n+140,textbuf[3],lstrlen(textbuf[3]));
}
void CImageNView::OnImageRed()
{
ToRGB(pImg[1],pImg[0],2);
WorkCanvusToWindow();
}
void CImageNView::OnImageGreen()
{
ToRGB(pImg[1],pImg[0],1);
WorkCanvusToWindow();
}
void CImageNView::OnImageBlue()
{
ToRGB(pImg[1],pImg[0],0);
WorkCanvusToWindow();
}
void CImageNView::OnSobelGradOr()
{
ColorSobel(pImg[1],pImg[0],0);
WorkCanvusToWindow();
}
void CImageNView::OnColorSobel()
{
ColorSobel(pImg[1],pImg[0],1);
WorkCanvusToWindow();
}
void CImageNView::OnColorSobelVector()
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -