當前位置:編程學習大全網 - 編程語言 - Peinfo編程

Peinfo編程

步驟和程序:

在VC程序-文件-新建-項目中打開MFC AppWizard(exe),在項目下面的框中輸入項目名稱(假設項目名稱為111),點擊確定-選擇多個文檔,點擊下壹步-再點擊下壹步,直到確認,基本框架完成,如下圖。

此時,VC界面的左邊框下方有三個按鈕:ClassView、ResourceView和FileView。在ClassView中,有engineering 111的類:CAdoutDlg,CChildFrame,CMy111App,CMY11Doc,CMy65438。在point ResourceView中有資源類:加速器、對話框、圖標、菜單、字符串表、工具欄和版本;;點擊文件視圖,有文件類:源文件,頭文件,資源文件和ReadMe.txt

在界面-添加項目-創建-選擇C++源文件中點擊“項目”按鈕,在文件下方的框中輸入文件名(如DIBAPI),點擊“結束”,這樣壹個DIBAPI.cpp文件就被添加到了FileView中的源文件中,所有的代碼都被添加到了該文件中。在界面-添加項目-創建-選擇C/C++頭文件中點擊“項目”按鈕,在文件下方的框中輸入文件名(必須與之前的文件名相同),點擊“結束”,這樣在FileView中的頭文件中就多了壹個DIBAPI.h文件,就是DIBAPI.cpp的頭文件

單擊空白的DIBAPI.h文件,並在該文件中輸入以下代碼:

//dibabi . h

#ifndef _INC_DIBAPI

#define _INC_DIBAPI

DECLARE _ HANDLE(HDIB);

#定義PALVERSION 0x300

# define IS _ WIN30 _ DIB(lpbi)((*(lpd word)(lpbi))= = sizeof(BITMAPINFOHEADER))

# define rect width(lpRect)((lpRect)-& gt;右-(lpRect)-& gt;左)

# define rect height(lpRect)((lpRect)-& gt;bottom-(lpRect)-& gt;頂部)

#定義寬度字節(位)(((位)+31)/32*4)

# define DIB _ HEADER _ MARKER((WORD)(' M ' & lt;& lt8)|'B ')

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

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

LPSTR WINAPI finddibits(LPSTR lpbi);

DWORD WINAPI DIB width(LPSTR lpDIB);

DWORD WINAPI DIB height(LPSTR lpDIB);

WORD WINAPI PaletteSize(LPSTR lpbi);

WORD WINAPI DIBNumColors(LPSTR lpbi);

h global WINAPI copy handle(h global h);

BOOL WINAPI SaveDIB(HDIB hDib,CFile & amp文件);

HDIB WINAPI read DIB file(CFile & amp;文件);

//在此輸入您自己的函數聲明。

#endif//!_INC_DIBAPI

以上功能用於實現圖像處理的基本功能,如讀取和存儲圖像。也可以在“//在此輸入自己的函數聲明”下輸入需要的函數。

單擊空白的DIBAPI.cpp文件,並添加以下代碼:

//DIBAPI.cpp

#包含" stdafx.h "

#包含“DIBAPI.h”

WORD WINAPI DIBNumColors(LPSTR lpbi)

{

WORD wBitCount

if(IS_WIN30_DIB(lpbi))

{

DWORD dwClrUsed

dwClrUsed =((LPBITMAPINFOHEADER)lpbi)-& gt;雙色的;

如果(dwClrUsed)

return(WORD)dwClrUsed;

}

if(IS_WIN30_DIB(lpbi))

wbit count =((LPBITMAPINFOHEADER)lpbi)-& gt;biBitCount

其他

wbit count =((LPBITMAPCOREHEADER)lpbi)-& gt;bcBitCount

開關(wBitCount)

{

案例1:

return 2;

案例4:

返回16;

案例8:

返回256;

默認值:

返回0;

}

}

WORD WINAPI PaletteSize(LPSTR lpbi)

{

if(IS_WIN30_DIB(lpbi))

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

其他

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

}

LPSTR WINAPI finddibits(LPSTR lpbi)

{

return(lpbi+*(lpd word)lpbi+::PaletteSize(lpbi));

}

DWORD WINAPI DIBWidth(LPSTR lpDIB)

{

LPBITMAPINFOHEADER lpbmi

LPBITMAPCOREHEADER lpbmc

lpbmi =(LPBITMAPINFOHEADER)lpDIB;

lpbmc =(LPBITMAPCOREHEADER)lpDIB;

if(IS_WIN30_DIB(lpDIB))

返回lpbmi-& gt;雙寬度;

其他

return (DWORD)lpbmc->bcWidth

}

DWORD WINAPI DIB height(LPSTR lpDIB)

{

LPBITMAPINFOHEADER lpbmi

LPBITMAPCOREHEADER lpbmc

lpbmi =(LPBITMAPINFOHEADER)lpDIB;

lpbmc =(LPBITMAPCOREHEADER)lpDIB;

if(IS_WIN30_DIB(lpDIB))

返回lpbmi-& gt;BIH height;

其他

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)

返回FALSE

lpDIBHdr =(LPSTR)::global lock((h global)hDIB);

lpDIBBits = FindDIBBits(lpDIBHdr);

如果(pPal!=空)

{

hPal =(HPA lette)pPal-& gt;m _ hObject

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

}

* SetStretchBltMode(hDC,COLORONCOLOR);

if((rect width(lpd cret)= = rect width(lpDIBRect))& amp;& amp(rect height(lpd rect)= = rect height(lpDIBRect)))

{

b success =::SetDIBitsToDevice(hDC,lpd rect-& gt;left,lpd rect-& gt;top,rect width(lpd rect),rect height(lpd rect),lpDIBRect-& gt;向左,\

(int)DIB height(lpDIBHdr)-lpDIBRect->top-RECTHEIGHT(lpDIBRect),0,(WORD)DIBHeight(lpDIBHdr),\

lpDIBBits,(LPBITMAPINFO)lpDIBHdr,DIB _ RGB _ COLORS);

}

其他

{

bSuccess=::StretchDIBits(hDC,lpd rect-& gt;left,lpd rect-& gt;top,rect width(lpd rect),rect height(lpd rect),lpDIBRect-& gt;向左,\

lpDIBRect-& gt;top,RECTWIDTH(lpDIBRect),RECTHEIGHT(lpDIBRect),\

lpDIBBits,(LPBITMAPINFO)lpDIBHdr,DIB_RGB_COLORS,src copy);

}

* global unlock((h global)hDIB);

if(hOldPal)

* select palette(hDC,hOldPal,TRUE);

全球解鎖(hDIB);

返回b成功;

}

BOOL WINAPI CreateDIBPalette(HDIB HDIB,CPalette* pPal)

{

LPLOGPALETTE lpPal

處理hLogPal

HPALETTE hPal = NULL

LPSTR lpbi

LPBITMAPINFO lpbmi

LPBITMAPCOREINFO lpbmc

BOOL bWinStyleDIB

int I;

WORD wNumColors

BOOL bResult = FALSE

if(hDIB==NULL)

返回FALSE

lpbi =(LPSTR)::global lock((h global)hDIB);

lpbmi =(LPBITMAPINFO)lpbi;

lpbmc =(LPBITMAPCOREINFO)lpbi;

wNumColors = DIBNumColors(lpbi);

bWinStyleDIB = IS _ WIN30 _ DIB(lpbi);

if(wNumColors!=0)

{

hLogPal=::GlobalAlloc(GHND,sizeof(log palette)+sizeof(palette entry)* wNumColors);

if(hLogPal==0)

{

* global unlock((h global)hDIB);

返回FALSE

}

lpPal =(LPLOGPALETTE)::global lock(hLogPal);

lpPal-& gt;palVersion = PALVERSION

lpPal-& gt;palNumEntries =(WORD)wNumColors;

bWinStyleDIB = IS _ WIN30 _ DIB(lpbi);

for(I = 0;我& lt(int)wNumColors;i++)

{

if(bWinStyleDIB)

{

lpPal-& gt;測心法[i]。peRed = lpbmi-& gt;bmiColors[i]。rgbRed

lpPal-& gt;測心法[i]。PE green = lpbmi-& gt;bmiColors[i]。rgbGreen

lpPal-& gt;測心法[i]。PE blue = lpbmi-& gt;bmiColors[i]。rgbBlue

lpPal-& gt;測心法[i]。PE flags = 0;

}

其他

{

lpPal-& gt;測心法[i]。peRed = lpbmc-& gt;bmciColors[i]。rgbtRed

lpPal-& gt;測心法[i]。PE green = lpbmc-& gt;bmciColors[i]。rgbtGreen

lpPal-& gt;測心法[i]。PE blue = lpbmc-& gt;bmciColors[i]。rgbtBlue

lpPal-& gt;測心法[i]。PE flags = 0;

}

}

br esult = pPal-& gt;create palette(lpPal);

* global unlock((h global)hLogPal);

* global free((h global)hLogPal);

}

* global unlock((h global)hDIB);

返回bResult

}

h global WINAPI copy handle(h global h)

{

if(h==NULL)

返回NULL

DWORD dwLen =::GlobalSize((h global)h);

h global hCopy = * global alloc(GHND,dwLen);

如果(hCopy!=空)

{

void * LP copy =::global lock((h global)hCopy);

void * LP =::global lock((h global)h);

memcpy(lpCopy,lp,dwLen);

*全球解鎖(hCopy);

*全球解鎖(h);

}

返回hCopy

}

BOOL WINAPI SaveDIB(HDIB hDib,CFile & amp文件)

{

BITMAPFILEHEADER bmfHdr

LPBITMAPINFOHEADER lpBI

DWORD dwDIBSize

如果(!hDib)

返回FALSE

lpBI =(LPBITMAPINFOHEADER)::global lock((h global)hDib);

if(lpBI==NULL)

返回FALSE

如果(!IS_WIN30_DIB(lpBI))

{

* global unlock((h global)hDib);

返回FALSE

}

bmf HDR . BF type = DIB _ HEADER _ MARKER;

dwDIBSize = *(lpd word)lpBI+::PaletteSize((LPSTR)lpBI);

if((lpBI-& gt;BI compression = = BI _ RLE 8)| |(lpBI-& gt;雙壓縮==BI_RLE4))

dwDIBSize+= lpBI-& gt;biSizeImage

其他

{

DWORD dwBmBitsSize

dwBmBitsSize = width bytes((lpBI-& gt;biWidth)*((DWORD)lpBI-& gt;biBitCount))* lpBI-& gt;BIH height;

dwDIBSize+= dwBmBitsSize;

lpBI->;biSizeImage = dwBmBitsSize

}

bmfhdr . bfsize = dwDIBSize+sizeof(bitmapfile header);

bmf HDR . BF reserved 1 = 0;

bmf HDR . BF reserved 2 = 0;

bmfhdr . bfoff bits =(DWORD)sizeof(bitmapfile header)+lpBI-& gt;biSize+::PaletteSize((LPSTR)lpBI);

嘗試

{

文件。write((LPSTR)& amp;bmfHdr,sizeof(bitmapfile header));

文件。WriteHuge(lpBI,dwDIBSize);

}

捕捉(CFileException,e)

{

* global unlock((h global)hDib);

THROW _ LAST();

}

結束_捕捉

* global unlock((h global)hDib);

返回TRUE

}

HDIB WINAPI read DIB file(CFile & amp;文件)

{

BITMAPFILEHEADER bmfHeader

DWORD dwBitsSize

HDIB hDIB

LPSTR pDIB

dwBitsSize=file。GetLength();

如果(文件。閱讀((LPSTR)& amp;bmfHeader,sizeof(bmfHeader))!=sizeof(bmfHeader))

返回NULL

if(bmfHeader.bfType!= DIB _ HEADER _ MARKER)

返回NULL

hDIB =(hDIB)::global alloc(GMEM _可移動| GMEM _零初始化,dwBitsSize);

if(hDIB==0)

返回NULL

pDIB =(LPSTR)::global lock((h global)hDIB);

如果(文件。ReadHuge(pDIB,dwBitsSize-sizeof(bitmapfile header))!= dwBitsSize-sizeof(bitmapfile header))

{

* global unlock((h global)hDIB);

* global free((h global)hDIB);

返回NULL

}

* global unlock((h global)hDIB);

返回hDIB

}

//在此輸入您自己的函數定義。

以上是DIBAPI.h頭文件中聲明的函數的定義,妳在“//在此輸入自己的函數定義”後添加自己的函數定義。

在下面添加相應的消息映射函數,點擊Ctrl+W,就會出現MFC ClassWizard對話框。單擊消息映射,在類名下的框中選擇CMy111Doc,然後在消息中選擇OnOpenDocument。然後單擊Add Function按鈕添加相應的消息映射函數。同樣的,添加OnSaveDocument、DeleteContents、CanCloseFrame對應的消息函數,點擊確定。

點擊文件111Doc.cpp,該文件包含相應消息映射函數定義的位置。在函數cmy 11 doc::cmy 11 doc()中輸入以下代碼。

m _ refColorBKG = 0x00808080

m _ hDIB = NULL

m _ palDIB = NULL

m_sizeDoc=CSize(1,1);

在函數cmy111doc中輸入以下代碼::~ cmy11doc():

if(m_hDIB!=空)

* global free((h global)m _ hDIB);

如果(m_palDIB!=空)

刪除m _ palDIB

在函數boolcymy 111 doc::on open document(lpctstr lpsz pathname)/todo:在此添加您的專用創建代碼,添加以下代碼:

CFile文件;

CFileException fe

如果(!文件。Open(lpszPathName,CFile::modeRead | CFile::shared enywrite,& ampfe))

{

ReportSaveLoadException(lpsz pathname,& ampfe,FALSE,AFX _ IDP _ FAILED _ TO _ OPEN _ DOC);

返回FALSE

}

delete contents();

BeginWaitCursor();

嘗試

{

m _ hDIB =::read DIB file(file);

}

CATCH(CFileException,eLoad)

{

文件。abort();

EndWaitCursor();

ReportSaveLoadException(lpsz pathname,eLoad,FALSE,AFX _ IDP _ FAILED _ TO _ OPEN _ DOC);

m _ hDIB = NULL

返回FALSE

}

結束_捕捉

InitDIBData();

EndWaitCursor();

if(m_hDIB==NULL)

{

CString strMsg

StrMsg= "讀取圖像時出錯!可能不支持這種類型的圖像文件!”;

MessageBox(NULL,strMsg,NULL,MB _ icon information | MB _ OK);

返回FALSE

}

set path name(lpsz pathname);

SetModifiedFlag(FALSE);

在函數boolcymy 111 doc::onsavedocument(lpctstr lpsz pathname)//todo之後添加以下代碼:在此添加您的專用代碼和/或調用基類:

CFile文件;

CFileException fe

如果(!文件。Open(lpszPathName,CFile::mode create | CFile::mode read write | CFile::share exclusive,& ampfe))

{

ReportSaveLoadException(lpsz pathname,& ampfe,TRUE,AFX _ IDP _ INVALID _ FILENAME);

返回FALSE

}

BOOL bSuccess = FALSE

嘗試

{

BeginWaitCursor();

bSuccess=::SaveDIB(m_hDIB,file);

文件。close();

}

CATCH(CException,eSave)

{

文件。abort();

EndWaitCursor();

ReportSaveLoadException(lpsz pathname,eSave,TRUE,AFX _ IDP _ FAILED _ TO _ SAVE _ DOC);

返回FALSE

}

結束_捕捉

EndWaitCursor();

SetModifiedFlag(FALSE);

如果(!b成功)

{

CString strMsg

StrMsg= "無法保存BMP圖像";

MessageBox(NULL,strMsg,NULL,MB _ icon information | MB _ OK);

}

單擊ClassView,右鍵單擊cmy 111 doc class,單擊添加成員變量,打開添加成員變量對話框。在變量類型下的框中輸入變量類型名稱HDIB,在變量名中輸入變量名m_hDIB,在Access中選擇Public添加到CMY11 Doc中。還要添加int類型的m_nColorIndex和COLORREF * * *類型的m_refColorBKG成員變量,然後添加保護成員變量(在Access中選擇)的CSize類和CPalette*類的m_palDIB變量。右鍵單擊CMy111Doc類,單擊添加成員函數打開添加成員函數對話框,在函數類型下的框中輸入函數類型名void,在函數聲明中輸入函數名InitDIBData()。在Access中選擇Public將公共成員函數initdibdata()添加到cmy 111 doc;同理,添加void類型男* * *成員函數ReplaceHDIB(HDIB hDIB)。在111Doc.cpp中添加函數的代碼,在InitDIBData()中添加以下代碼:

如果(m_palDIB!=空)

{

刪除m _ palDIB

m _ palDIB = NULL

}

if(m_hDIB==NULL)

返回;

LPSTR lpDIB =(LPSTR)::global lock((h global)m _ hDIB);

if(::DIBWidth(lpDIB)>INT_MAX||::DIBHeight(lpDIB)>INT_MAX)

{

* global unlock((h global)m _ hDIB);

* global free((h global)m _ hDIB);

m _ hDIB = NULL

CString strMsg

StrMsg="BMP圖像太大!";

MessageBox(NULL,strMsg,NULL,MB _ icon information | MB _ OK);

返回;

}

m _ size doc = CSize((int)::DIB width(LP DIB),(int)::DIB height(LP DIB));

* global unlock((h global)m _ hDIB);

m _ palDIB = new CPalette

if(m_palDIB==NULL)

{

* global free((h global)m _ hDIB);

m _ hDIB = NULL

返回;

}

if(::CreateDIBPalette(m_hDIB,m_palDIB)==NULL)

{

刪除m _ palDIB

m _ palDIB = NULL

返回;

}

將以下代碼添加到函數ReplaceHDIB(HDIB hDIB)中:

if(m_hDIB!=空)

* global free((h global)m _ hDIB);

m _ hDIB = hDIB

在cmy111doc.h

//屬性

公共:

添加以下代碼:

HDIB GetHDIB()常量

{

返回m _ hDIB

}

CPalette* GetDocPalette()常量

{

返回m _ palDIB

}

CSize GetDocSize()常量

{

返回m _ sizeDoc

}

註意在111Doc.h之前(class cmy 11 doc:public CDocument的語句之前)添加語句# include“dibapi . h”。

以下代碼被添加到函數void cmy 111 view+01 view::ondraw(CDC * PDC)中:

BeginWaitCursor();

cmy 111 * pDoc = get document();

ASSERT _ VALID(pDoc);

// TODO:在此添加本機數據的繪制代碼

HDIB HDIB = pDoc-& gt;GetHDIB();

if(hDIB!=空)

{

LPSTR lpDIB =(LPSTR)::global lock((h global)hDIB);

int CX DIB =(int)::DIB width(LP DIB);

int cy DIB =(int)::DIB height(LP DIB);

* global unlock((h global)hDIB);

CRect rcDIB

RC DIB . top = RC DIB . left = 0;

RC DIB . right = CX DIB;

RC DIB . bottom = cy DIB;

CRect rcDest

if(pDC-& gt;IsPrinting())

{

int CX page = pDC-& gt;GetDeviceCaps(horz RES);

int cy page = pDC-& gt;GetDeviceCaps(VERTRES);

int c xinch = pDC-& gt;GetDeviceCaps(LOGPIXELSX);

int cy inch = pDC-& gt;GetDeviceCaps(LOGPIXELSY);

rcdest . top = rcdest . left = 0;

rcdest . bottom =(int)(((double)cy DIB * CX page * cy inch)/((double)CX DIB * CX inch));

RC dest . right = CX page;

int temp = cy page-(r dest . bottom-r dest . top);

rcdest . bottom+= temp/2;

rcdest . top+= temp/2;

}

其他

{

rcDest = rcDIB

}

* paint DIB(pDC-& gt;m _ hDC & amp;rcDest,pDoc-& gt;GetHDIB(),& amprcDIB,pDoc-& gt;GetDocPalette());

}

EndWaitCursor();

以上是打開、顯示和保存圖像的相關步驟和代碼。

11.cpp文件中InitInstance()函數的ParseCommandLine(cmd info);在聲明下輸入壹條聲明

cmd info . m _ nShellCommand = CCommandLineInfo::file nothing;

啟動時不會自動打開空文檔。

顯示圖像直方圖:

1.點擊ResourceView,右鍵對話框,在屬性對話框中選擇插入對話框將ID改為ID_HIST,對話框名稱改為“直方圖”。

2.點擊工具欄中的插入-新建類,輸入類名,選擇基類為CDialog,對話框ID為ID_HIST。這樣,對話框與類鏈接,壹個編輯控件被拖入對話框,其ID設置為IDC _ HISTSHOW;

3.按快捷鍵“Ctrl+W”打開MFC類向導對話框。在Messages列中選擇WM_INITDIALOG和WM_Paint,然後點擊“添加函數”將對話框初始化和繪圖函數添加到對話框類中。

4.在Hist.h文件中的“public:”下輸入以下變量定義:

LONG m _ lCount[256];

char * m _ lpDIBBits

LONG m _ lWidth

LONG m _ lHeight

int m _ iIsDraging

CDlgIntensity(CWnd * p parent = NULL);

5.打開Hist.cpp程序,在CHist::OnInitDialog()函數中的“//todo:add extra initial ization here”前復制以下代碼:

無符號char * lpSrc

龍我;

龍j;

6.將以下代碼復制到“//todo:在此添加額外的初始化”之後:

CWnd * pWnd = GetDlgItem(IDC _ hist show);

CRect rect

GetClientRect(rect);

client to screen(& amp;rect);

for(I = 0;我& lt256;i++)

{

m _ lCount[I]= 0;

}

長線性字節;

lline bytes = width bytes(m _ lWidth * 8);

for(I = 0;我& ltm _ LH height;i++)

{

for(j = 0;j & ltm _ lWidthj++)

{

LP src =(unsigned char *)m _ lpDIBBits+lline bytes * I+j;

m _ lCount[*(lpSrc)]++;

}

}

m _ iIsDraging = 0;

7.在CHist::OnPaint()函數中“CPaintDC DC(this);”將以下代碼復制到它之前:

CString字符串;

龍我;

LONG lmax count = 0;

LONG m _ ilow gray = 0;

LONG m _ iUpGray = 255

將以下代碼復制到CHist::OnPaint()函數"//todo:在此添加您的消息處理程序代碼"之後:

CWnd * pWnd = GetDlgItem(IDC _ hist show);

CDC * pDC = pWnd-& gt;GetDC();

pWnd-& gt;invalidate();

pWnd-& gt;update window();

pDC->;矩形(0,0,330,300);

CPen * pPenRed =新CPen;

ppen red-& gt;CreatePen(PS_SOLID,1,RGB(255,0,0));

CPen * pPenBlue =新CPen;

ppen blue-& gt;CreatePen(PS_SOLID,1,RGB(0,0,255));

CPen * pPenGreen = new CPen

ppeng green-& gt;CreatePen(PS_SOLID,1,RGB(0,255,0));

CGdiObject * pold pen = pDC-& gt;select object(ppen red);

pDC->;MoveTo(10,10);

pDC->;LineTo(10,280);

pDC->;LineTo(320,280);

海峽。格式(" 0 ");

pDC->;TextOut(10,283,str);

海峽。格式(" 50 ");

pDC->;TextOut(60,283,str);

海峽。格式(" 100 ");

pDC->;TextOut(110,283,str);

海峽。格式(" 150 ");

pDC->;TextOut(160,283,str);

海峽。格式(“200”);

pDC->;TextOut(210,283,str);

海峽。格式(" 255 ");

pDC->;TextOut(265,283,str);

for(I = 0;我& lt256;i+=5)

{

如果((我& amp1)==0)

{

pDC->;MoveTo(i+10,280);

pDC->;LineTo(i+10,284);

}

其他

{

pDC->;MoveTo(i+10,280);

pDC->;LineTo(i+10,282);

}

}

pDC->;MoveTo(315,275);

pDC->;LineTo(320,280);

pDC->;LineTo(315,285);

pDC->;MoveTo(10,10);

pDC->;LineTo(5,15);

pDC->;MoveTo(10,10);

pDC->;LineTo(15,15);

for(I = m _ ilow gray;我& lt= m _ iUpGrayi++)

{

if(m _ lCount[I]& gt;lMaxCount)

{

lmax count = m _ lCount[I];

}

}

pDC->;MoveTo(10,25);

pDC->;LineTo(14,25);

海峽。格式(" %d ",lmax count);

pDC->;TextOut(11,26,str);

pDC->;select object(ppeng green);

pDC->;MoveTo(m_iLowGray+10,25);

pDC->;LineTo(m_iLowGray+10,280);

pDC->;MoveTo(m_iUpGray+10,25);

pDC->;LineTo(m_iUpGray+10,280);

pDC->;select object(ppen blue);

if(lmax count & gt;0)

{

for(I = m _ ilow gray;我& lt= m _ iUpGrayi++)

{

pDC->;MoveTo(i+10,280);

pDC->;LineTo(i+10,281-(int)(m _ lCount[I]* 256/lmax count));

}

}

pDC->;select object(pold pen);

刪除pPenRed

刪除pPenBlue

刪除pPenGreen

8.單擊ResourceView中的菜單,將出現IDR_MAINFRAME和IDR _ my 111 type。雙擊IDR _ my 111 type,程序界面出現,有文件、編輯、查看、窗口、幫助按鈕。右鍵點擊視圖-點擊屬性下的虛線框,輸入標題(直方圖)和ID(大寫英文,如ID_VIEW_HIST),使按鈕和程序通過ID鏈接。點擊此按鈕,相應的程序將被執行。為此按鈕添加壹個函數:點擊Ctrl+W打開MFC ClassWizard對話框,選擇類名為CMy111View,在對象ID對應的選項中選擇集合ID(如ID_VIEW_HIST),在Messages選項中選擇COMMAND。然後點擊“添加函數”按鈕,選擇默認設置,為ID_VIEW_HIST添加相應的函數OnViewHist()。該函數在文件111View.cpp中定義,將以下代碼添加到函數void cmy 111 view::onview hist()中:

// TODO:在此添加命令處理程序代碼

cmy 111 doc * pDoc = get document();

if(pDoc-& gt;m_hDIB==NULL)

{

MessageBox("請先打開壹張256色的BMP圖片!",“系統提示”,MB _ icon information | MB _ OK);

返回;

}

LPSTR lpDIB

LPSTR lpDIBBits

LP DIB =(LPSTR)::global lock((h global)pDoc-& gt;GetHDIB());

lpDIBBits =::finddibits(lpDIB);

if(::DIBNumColors(lpDIB)!=256)

{

MessageBox("目前只能查看256色位圖灰度直方圖!",“系統提示”,MB _ icon information | MB _ OK);

* global unlock((h global)pDoc-& gt;GetHDIB());

返回;

}

BeginWaitCursor();

CHist dlgPara

dlgPara.m _ lpDIBBits = lpDIBBits

DLG para . m _ lWidth =::DIB width(LP DIB);

DLG para . m _ LH height =::DIB height(LP DIB);

//DLG para . m _ ilow gray = 0;

//DLG para . m _ iup gray = 255;

如果(dlgPara。DoModal()!=IDOK)

{

返回;

}

* global unlock((h global)pDoc-& gt;GetHDIB());

EndWaitCursor();

  • 上一篇:直線電機是什麽概念?
  • 下一篇:四川14歲男孩身高221厘米,網友紛紛羨慕,身高對於男生意味著什麽?
  • copyright 2024編程學習大全網