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

📄 bmp.c

📁 这是我珍藏的图像处理入门C源码分析,给大家共享了!
💻 C
📖 第 1 页 / 共 5 页
字号:
			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_HISTOGRAM:

			if(hImgData!=NULL){

				if(Histogram(hWnd))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_TRUE256:

			if(hImgData!=NULL){

				if(Trueto256(hWnd))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_CLRGRAY:

			if(hImgData!=NULL){

				if(ColortoGrayScale(hWnd))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_INVERT:

			if(hImgData!=NULL){

				if(Invert(hWnd))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_CONTSTRETCH:

			if(hImgData!=NULL){

				if (ContrastStretch(hWnd))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_CLIPING:

			if(hImgData!=NULL){

				if(Cliping(hWnd))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_THRESHOLD:

			if(hImgData!=NULL){

				if(Thresholding(hWnd))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_SLICEWITHOUTBACK:

			if(hImgData!=NULL){

				if(Slice(hWnd,FALSE))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_SLICEWITHBACK:

			if(hImgData!=NULL){

				if(Slice(hWnd,TRUE))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_HISTOGRAMEQUA:

			if(hImgData!=NULL){

				if(HistogramEqua(hWnd))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_HDILATION:

			if(hImgData!=NULL){

				if(Dilation(hWnd,TRUE))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_VDILATION:

			if(hImgData!=NULL){

				if(Dilation(hWnd,FALSE))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_HEROSION:

			if(hImgData!=NULL){

				if(Erosion(hWnd,TRUE))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_VEROSION:

			if(hImgData!=NULL){

				if(Erosion(hWnd,FALSE))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_HOPEN:

			if(hImgData!=NULL){

				if(MorphOpen(hWnd,TRUE))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_VOPEN:

			if(hImgData!=NULL){

				if(MorphOpen(hWnd,FALSE))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_HCLOSE:

			if(hImgData!=NULL){

				if(MorphClose(hWnd,TRUE))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_VCLOSE:

			if(hImgData!=NULL){

				if(MorphClose(hWnd,FALSE))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_THINNING:

			if(hImgData!=NULL){

				if(Thinning(hWnd))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_OUTLINE:

			if(hImgData!=NULL){

				if(Outline(hWnd))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_HSOBEL:

			if(hImgData!=NULL){

				if(TemplateOperation(hWnd,TEMPLATE_SOBEL_H))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_VSOBEL:

			if(hImgData!=NULL){

				if(TemplateOperation(hWnd,TEMPLATE_SOBEL_V))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_HISOSOBEL:

			if(hImgData!=NULL){

				if(TemplateOperation(hWnd,TEMPLATE_ISOSOBEL_H))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_VISOSOBEL:

			if(hImgData!=NULL){

				if(TemplateOperation(hWnd,TEMPLATE_ISOSOBEL_V))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_HOUGH:

			if(hImgData!=NULL) 

				Hough(hWnd);

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_HMEDIAN:

			if(hImgData!=NULL){

				if(MedianFilter(hWnd,TRUE))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_VMEDIAN:

			if(hImgData!=NULL){

				if(MedianFilter(hWnd,FALSE))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_LOG:

			if(hImgData!=NULL){

				if(LapOfGauss(hWnd))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_CONTOUR:

			if(hImgData!=NULL){

				if(Contour(hWnd))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_SEEDFILL:

			if(hImgData!=NULL){

				IsSelecting=TRUE;

				MessageBox(hWnd,"Please click the area to be filled!","Message",MB_OK|MB_ICONEXCLAMATION);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_HPROJECTION:

			if(hImgData!=NULL){

				if(Projection(hWnd,TRUE))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_VPROJECTION:

			if(hImgData!=NULL){

				if(Projection(hWnd,FALSE))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_SUBTRACTION:

			if(hImgData!=NULL){

				MessageBox(hWnd,"Be sure that c:\\test.bmp and c:\\backgnd.bmp are both 256 grayscale bitmaps ! They must be same size and have same palette!","Important",MB_OK);

				if(Subtraction(hWnd))

					InvalidateRect(hWnd,NULL,TRUE);

			}

			else

				MessageBox(hWnd,"File not loaded yet!","Error Message",MB_OK|MB_ICONEXCLAMATION);

			break;

		case IDM_RUNLENGTH:

			//注意重新分配内存和调色板,位图句柄时,先释放原来的

	        if(hBitmap!=NULL){     

				DeleteObject(hBitmap);

	            hBitmap=NULL;

	        }

	        if(hPalette!=NULL){                     

				DeleteObject(hPalette);

	            hPalette=NULL;

	        }

			if(hImgData!=NULL){

				GlobalUnlock(hImgData);

				GlobalFree(hImgData);  

				hImgData=NULL;

			}	        

			if(LoadPcxFile(hWnd,"c:\\test.pcx")) //成功,则重画窗口

                InvalidateRect(hWnd,NULL,TRUE);

	        break;

		case IDM_JPEG:

			//注意重新分配内存和调色板,位图句柄时,先释放原来的

	        if(hBitmap!=NULL){     

				DeleteObject(hBitmap);

	            hBitmap=NULL;

	        }

	        if(hPalette!=NULL){                     

				DeleteObject(hPalette);

	            hPalette=NULL;

	        }

			if(hImgData!=NULL){

				GlobalUnlock(hImgData);

				GlobalFree(hImgData);  

				hImgData=NULL;

			}	        

			if(LoadJpegFile(hWnd,"c:\\test.jpg")) //成功,则重画窗口

                InvalidateRect(hWnd,NULL,TRUE);

	        break;

		case IDM_EXIT:

	        SendMessage(hWnd,WM_DESTROY,0,0L);

	        break;

	    }

	break;                

    }

    return DefWindowProc (hWnd, message, wParam, lParam);

}

////////////////////////////////////////////////////////////////

BOOL LoadBmpFile (HWND hWnd,char *BmpFileName)

{   

    HFILE              hf;

    LPBITMAPINFOHEADER lpImgData;

    LOGPALETTE         *pPal;

    LPRGBQUAD          lpRGB;

    HPALETTE           hPrevPalette; 

    HDC                hDc;

	HLOCAL             hPal;

	DWORD 		       ImgSize;

	DWORD              i;



    if((hf=_lopen(BmpFileName,OF_READ))==HFILE_ERROR){

        MessageBox(hWnd,"File c:\\test.bmp not found!","Error Message",MB_OK|MB_ICONEXCLAMATION);

        return FALSE;

	}

	_lread(hf,(LPSTR)&bf,sizeof(BITMAPFILEHEADER)); 

	_lread(hf,(LPSTR)&bi,sizeof(BITMAPINFOHEADER));

	ImgWidth=bi.biWidth;

	ImgHeight=bi.biHeight;

	LineBytes=(DWORD)WIDTHBYTES(bi.biWidth*bi.biBitCount);

	ImgSize=(DWORD)LineBytes*bi.biHeight;

    if(bi.biClrUsed!=0)

		NumColors=(DWORD)bi.biClrUsed;

	else

        switch(bi.biBitCount){

	       	case 1:

        	    NumColors=2;

        	    break;

        	case 4:

        	    NumColors=16;

        	    break;

        	case 8:

        	    NumColors=256;

        	    break;

        	case 24:

        	    NumColors=0;

        	    break;

              default:

                  MessageBox(hWnd,"Invalid color numbers!","Error Message",MB_OK|MB_ICONEXCLAMATION);

                  _lclose(hf);

                  return FALSE; 

        }

	if(bf.bfOffBits!=(DWORD)(NumColors*sizeof(RGBQUAD)+sizeof(BITMAPFILEHEADER)

							+sizeof(BITMAPINFOHEADER)))

	{

    	MessageBox(hWnd,"Invalid color numbers!","Error Message" ,MB_OK|

	               MB_ICONEXCLAMATION);

		_lclose(hf);

		return FALSE; 

	}

	bf.bfSize=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+NumColors*sizeof(RGBQUAD)+ImgSize;

	if((hImgData=GlobalAlloc(GHND,(DWORD)(sizeof(BITMAPINFOHEADER)+

						     NumColors*sizeof(RGBQUAD)+ImgSize)))==NULL)

	{

    	MessageBox(hWnd,"Error alloc memory!","ErrorMessage",MB_OK|

                   MB_ICONEXCLAMATION);

	    _lclose(hf);

		return FALSE;

	}

  

	lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData); 

    _llseek(hf,sizeof(BITMAPFILEHEADER),FILE_BEGIN);

	_hread(hf,(char *)lpImgData,(long)sizeof(BITMAPINFOHEADER)

           +(long)NumColors*sizeof(RGBQUAD)+ImgSize);

	_lclose(hf);

    if(NumColors!=0)

	{                    

	    hPal=LocalAlloc(LHND,sizeof(LOGPALETTE) + NumColors* sizeof(PALETTEENTRY));

	    pPal =(LOGPALETTE *)LocalLock(hPal);

	    pPal->palNumEntries =(WORD) NumColors;

		pPal->palVersion    = 0x300;

	    lpRGB = (LPRGBQUAD)((LPSTR)lpImgData + (DWORD)sizeof(BITMAPINFOHEADER));

		for (i = 0; i < NumColors; i++) {

     		pPal->palPalEntry[i].peRed=lpRGB->rgbRed;

			pPal->palPalEntry[i].peGreen=lpRGB->rgbGreen;

			pPal->palPalEntry[i].peBlue=lpRGB->rgbBlue;

			pPal->palPalEntry[i].peFlags=(BYTE)0;

			lpRGB++;

		}

		hPalette=CreatePalette(pPal);

		LocalUnlock(hPal);

		LocalFree(hPal);

	}

	hDc=GetDC(hWnd);

	if(hPalette){

        hPrevPalette=SelectPalette(hDc,hPalette,FALSE);

		RealizePalette(hDc);

	}

	hBitmap=CreateDIBitmap(hDc,	(LPBITMAPINFOHEADER)lpImgData, (LONG)CBM_INIT,

				(LPSTR)lpImgData+sizeof(BITMAPINFOHEADER) +NumColors*sizeof(RGBQUAD),

   				(LPBITMAPINFO)lpImgData, DIB_RGB_COLORS);

	if(hPalette && hPrevPalette){

		SelectPalette(hDc,hPrevPalette,FALSE);

		RealizePalette(hDc);

	}

 

	ReleaseDC(hWnd,hDc);

	GlobalUnlock(hImgData);

	return TRUE; 

}

////////////////////////////////////////////////////////////////

BOOL CALLBACK InputBox( HWND hDlg, UINT message,WPARAM wParam, LPARAM lParam )

⌨️ 快捷键说明

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