、你用VC++建立一个MFC(exe)工程,命名为“My”,在d出的“MFC应用程序向导-步骤1”
中选“单文档”,然后点“完成”->“确定”。
GetDocument()”在其下方添加如下代码:
LPBITMAPINFO
bmi
LPBYTE
pBits
BOOL
Read(char*
s)
3、然后打开“MyView.cpp”文件,在最下面写如下代码:
BOOL
CMyView::Read(char*
s)
{
CFile
file
BITMAPFILEHEADER
bmfh
//打开文件
if(!file.Open(s,CFile::modeRead))
{
AfxMessageBox("File
cannot
open!")
return
FALSE
}
//读文件信息头
file.Read(
(LPVOID)&bmfh,
sizeof(bmfh)
)
if(bmfh.bfType
!=
0x4d42)
{
AfxMessageBox("This
is
not
a
bmp
file!")
return
FALSE
}
//读位图信息头
int
infoSize
=
bmfh.bfOffBits
-
sizeof(bmfh)
bmi
=
(LPBITMAPINFO)new
BYTE[infoSize]
file.Read(
(LPVOID)bmi,
infoSize)
if(bmi->bmiHeader.biBitCount!=1
&&
bmi->bmiHeader.biBitCount!=4
&&
bmi->bmiHeader.biBitCount!=8
&&
bmi->bmiHeader.biBitCount!=24)
{
AfxMessageBox("The
number
of
colors
is
not
valid!")
return
FALSE
}
//读图像数据
pBits
=
new
BYTE[bmi->bmiHeader.biSizeImage]
file.Read(
(LPVOID)pBits,
bmi->bmiHeader.biSizeImage)
return
TRUE
}
往上找,找到构造函数:CMyView::CMyView()
在其中添加代码:
Read("d:\\picture\\图片.bmp")
往下找,找到OnDraw函数,在该函数的第三行添加代码:
if(bmi
&&
pBits)
{
::StretchDIBits(pDC->GetSafeHdc(),0,0,bmi->bmiHeader.biWidth,bmi->bmiHeader.biHeight,0,0,bmi->bmiHeader.biWidth,bmi->bmiHeader.biHeight,pBits,bmi,DIB_RGB_COLORS,SRCCOPY)
}
MFC中有一个功能很强大的类CImage,建议你使用这个类,首先#inculde<altimage.h>CImage image//定义一个CImage类的对象 这里对象名字是image
image.Load("文件地址")//在load函数中加入文件的地址
CDC *pDC = this->GetDC() //获得当前设备上下文 通俗讲就是画布 也就是你看到的屏幕
image.Draw(pDC->m_hDC,CPoint(0,0))//记得把CPoint(0,0)换成你想要的位置哦
//还有一种画法image.Draw(pDC->m_hDC,CRect(x1,y1,x2,y2))就是把图片画到矩形里 可以伸缩的
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)