vjc机器人灰度怎么编程_求用vc++编程实现显示灰度直方图的详细步骤,越详细越好...

展开全部

步骤和程序:

打开VC程序——文件——新建——工程中的MFC AppWizard(exe),在工程下面的框中输入工程名(假定32313133353236313431303231363533e78988e69d8331333238653965工程名为111),点确定——选多重文档,点下一个——后面都点下一个直到完成确定,基本框架就完成了,下面就加代码。

这时VC界面上左边框的下面有三个按钮:ClassView、ResourceView和FileView,ClassView里面是工程111的类:CAdoutDlg、CChildFrame、CMy111App、CMy111Doc、CMy111View和Globals;点ResourceView里面是资源类:Accelerator、Dialog、Icon、Menu、String Table、Toolbar和Version;点开FileView里面是文件类:Source File、Header Files、Resource Files和ReadMe.txt。

点界面的“工程”按钮——添加工程——新建——选C++ Source File,在文件下面的框里输入文件名(如DIBAPI),点“结束”,这样在FileView中的Source Files里面就多了一个DIBAPI.cpp文件,所有的代码都加在该文件中。再点界面的“工程”按钮——添加工程——新建——选C/C++ Header File,在文件下面的框里输入文件名(和前面的文件名必须一致),点“结束”,这样在FileView中的Header Files里面就多了一个DIBAPI.h文件,该文件是DIBAPI.cpp的头文件。

点开DIBAPI.h文件,里面是空白的,把如下代码考入文件中:

//DIBAPI.h

#ifndef _INC_DIBAPI

#define _INC_DIBAPI

DECLARE_HANDLE(HDIB);

#define PALVERSION 0x300

#define IS_WIN30_DIB(lpbi) ((*(LPDWORD)(lpbi))==sizeof(BITMAPINFOHEADER))

#define RECTWIDTH(lpRect) ((lpRect)->right-(lpRect)->left)

#define RECTHEIGHT(lpRect) ((lpRect)->bottom-(lpRect)->top)

#define WIDTHBYTES(bits) (((bits)+31)/32*4)

#define DIB_HEADER_MARKER ((WORD)('M'<<8)|'B')

BOOL WINAPI PaintDIB(HDC,LPRECT,HDIB,LPRECT,CPalette* pPal);

BOOL WINAPI CreateDIBPalette(HDIB hDIB,CPalette* cPal);

LPSTR WINAPI FindDIBBits(LPSTR lpbi);

DWORD WINAPI DIBWidth(LPSTR lpDIB);

DWORD WINAPI DIBHeight(LPSTR lpDIB);

WORD WINAPI PaletteSize(LPSTR lpbi);

WORD WINAPI DIBNumColors(LPSTR lpbi);

HGLOBAL WINAPI CopyHandle(HGLOBAL h);

BOOL WINAPI SaveDIB(HDIB hDib,CFile& file);

HDIB WINAPI ReadDIBFile(CFile& file);

//在此处输入自己的函数声明

#endif//!_INC_DIBAPI

上面这些函数是实现图像的读取、存储等图像处理的基本功能的,你将自己需要的函数也输入到“//在此处输入自己的函数声明”的下面。

点开DIBAPI.cpp文件,里面是空白的,将如下代码加入其中:

//DIBAPI.cpp

#include "stdafx.h"

#include "DIBAPI.h"

WORD WINAPI DIBNumColors(LPSTR lpbi)

{

WORD wBitCount;

if(IS_WIN30_DIB(lpbi))

{

DWORD dwClrUsed;

dwClrUsed=((LPBITMAPINFOHEADER)lpbi)->biClrUsed;

if(dwClrUsed)

return (WORD)dwClrUsed;

}

if(IS_WIN30_DIB(lpbi))

wBitCount=((LPBITMAPINFOHEADER)lpbi)->biBitCount;

else

wBitCount=((LPBITMAPCOREHEADER)lpbi)->bcBitCount;

switch(wBitCount)

{

case 1:

return 2;

case 4:

return 16;

case 8:

return 256;

default:

return 0;

}

}

WORD WINAPI PaletteSize(LPSTR lpbi)

{

if(IS_WIN30_DIB(lpbi))

return (WORD)(DIBNumColors(lpbi)*sizeof(RGBQUAD));

else

return (WORD)(DIBNumColors(lpbi)*sizeof(RGBTRIPLE));

}

LPSTR WINAPI FindDIBBits(LPSTR lpbi)

{

return (lpbi+*(LPDWORD)lpbi+::PaletteSize(lpbi));

}

DWORD WINAPI DIBWidth(LPSTR lpDIB)

{

LPBITMAPINFOHEADER lpbmi;

LPBITMAPCOREHEADER lpbmc;

lpbmi=(LPBITMAPINFOHEADER)lpDIB;

lpbmc=(LPBITMAPCOREHEADER)lpDIB;

if(IS_WIN30_DIB(lpDIB))

return lpbmi->biWidth;

else

return (DWORD)lpbmc->bcWidth;

}

DWORD WINAPI DIBHeight(LPSTR lpDIB)

{

LPBITMAPINFOHEADER lpbmi;

LPBITMAPCOREHEADER lpbmc;

lpbmi=(LPBITMAPINFOHEADER)lpDIB;

lpbmc=(LPBITMAPCOREHEADER)lpDIB;

if(IS_WIN30_DIB(lpDIB))

return lpbmi->biHeight;

else

return (DWORD)lpbmc->bcHeight;

}

BOOL WINAPI PaintDIB(HDC hDC,LPRECT lpDCRect,HDIB hDIB,LPRECT lpDIBRect,CPalette* pPal)

{

LPSTR lpDIBHdr;

LPSTR lpDIBBits;

BOOL bSuccess=FALSE;

HPALETTE hPal=NULL;

HPALETTE hOldPal=NULL;

if(hDIB==NULL)

return FALSE;

lpDIBHdr=(LPSTR)::GlobalLock((HGLOBAL)hDIB);

lpDIBBits=FindDIBBits(lpDIBHdr);

if(pPal!=NULL)

{

hPal=(HPALETTE)pPal->m_hObject;

hOldPal=::SelectPalette(hDC,hPal,TRUE);

}

::SetStretchBltMode(hDC,COLORONCOLOR);

if((RECTWIDTH(lpDCRect)==RECTW

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值