⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 laplaciansketch.c

📁 本下载文件是《C/C++图像处理编程》一书的演示程序
💻 C
字号:
//       Ex9
//  Laplacian 素描
 
#include <windows.h>
#include "image32.h"

extern HDC	  hMemDC;
extern struct IMAGE	*image;
extern struct IMAGE *Image[10];
  
void ColorToGray(int m,int n);                                            //  变灰阶

int  Mask[3][3],Scale=1,Offset=0;

void Template(BYTE **list1,BYTE **list0,int Dx,int Dy)
{
  int  i,j,g;
  
  for (i=1;i<Dy-1;i++) {
    for (j=1;j<Dx-1;j++) {
      g = (Mask[0][0]*list1[i-1][j-1]+Mask[0][1]*list1[i-1][j]
	      +Mask[0][2]*list1[i-1][j+1]+Mask[1][0]*list1[i][j-1]
	      +Mask[1][1]*list1[i][j]    +Mask[1][2]*list1[i][j+1]
	      +Mask[2][0]*list1[i+1][j-1]+Mask[2][1]*list1[i+1][j]
	      +Mask[2][2]*list1[i+1][j+1])/Scale+Offset;  
	  if (g>0xff) g=0xff;
	  else if (g<0) g=0;
	  list0[i][j] = (BYTE) g;   
    }
  }
}

void TemplateD(struct IMAGE *image,int x,int y,int Dx,int Dy)
{
  BYTE *buf1,*buf0;
  BYTE **list1,**list0;
  int  i;
  
  buf1 =(BYTE*)  malloc(Dx*Dy*sizeof(BYTE));
  buf0 =(BYTE*)  malloc(Dx*Dy*sizeof(BYTE));
  getimage(image,x,y,Dx,Dy,buf1); 
  list1=(BYTE**) malloc(Dy*sizeof(BYTE*));
  list0=(BYTE**) malloc(Dy*sizeof(BYTE*));
  for(i=0;i<Dy;i++) {
    list1[i]=buf1+i*Dx;
	list0[i]=buf0+i*Dx;
  }

  Template(list1,list0,Dx,Dy);
 
  for(i=1;i<Dy-1;i++) 
    setimage(image,x+1,y+i,Dx-2,1,&list0[i][1]); 
   
  free(buf1);  
  free(buf0);  
  free(list1);  
  free(list0);  
}

void LapSketchD8(struct IMAGE *image,int x,int y,int Dx,int Dy)
{  
   Scale=1;		Offset=255;               
   Mask[0][0]=Mask[0][2]=Mask[2][0]=Mask[2][2]=-1;  
   Mask[0][1]=Mask[2][1]=Mask[1][0]=Mask[1][2]=-1;
   Mask[1][1]=8;
   TemplateD(image,x,y,Dx,Dy);                 
   Offset=0;
}

void LaplacianSketch(HWND hWnd)
{
   if ((Image[0]->hdib==NULL)||(Image[0]->bitcount<8)) return; 
 
   ClearDDB();
   WriteDDB(Image[0],  0,  0, 0, 0,512,512);

   ColorToGray(0,1);
   LapSketchD8(Image[1],0,0,Image[1]->wid,Image[1]->hei);
   WriteDDB(Image[1],512,  0, 0, 0,512,512);
   InvalidateRect(hWnd,NULL,FALSE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -