如何在对话框里显示BMP图片

如何在对话框里显示BMP图片,第1张

如何在对话框里显示BMP图片

想在自己新建的一个Dialog对话框里显示一张BMP图片。(如果可以教我显示其他格式如JPG等的话更好~)

这个图片的获取是从数据库里读取出来的,但是只能读取出该图片在我电脑上存放的绝对路径。于是我现在需要利用这个绝对路径,在Dialog里显示出这张图。

于是我在网上找出了这样一段代码:

C/C++ code

?

1

2

3

4

5

CStatic *pStatic = (CStatic *)GetDlgItem(IDC_STATIC) // IDC_STATIC 是Dialog里的一个PictureControl控件ID

HBITMAP hBitmap =::LoadBitmap(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDB_BITMAP3))

pStatic->ModifyStyle(0xF,SS_BITMAP|SS_CENTERIMAGE)

pStatic->SetBitmap(hBitmap)

这个代码在Dialog里建立一个PictureControl控件,最后也的确输出了图片。

但是这个方法的前提是,必须在“资源视图”里添加BITMAP对象,把BMP图片存进这个对象,再输出图像来。

而我现在只能得到图片文件的绝对路径,我试过把第二行代码里的IDB_BITMAP3直接改为图片的绝对路径,但是改了之后就无法显示了。

希望知道该如何解决。

自己设想的解决方案是:

1、能不能通过编写代码,通过利用图片的绝对路径,来创建一个资源视图里的BITMAP对象,利用上面代码实现输出。

2、能不能不用PictureControl控件,利用什么DC来实现图片输出(我对DC了解很浅)

1、通过导入位图资源的方式,加载位图,当图片质量高时,不能预览,但是在资源视图里面已经存在,然后可以像自定义位图那样使用;

2、若使用的位图超过256色,则VC编译器打不开这些位图资源;

3、VC正常创建、处理的位图只有单色,16色,256色,不支持24位的位图格式;

注:这里涉及到的都是位图文件(*.bmp),通过导入资源的方式,VC不支持jpg格式资源,不过可用代码实现加载jpg或其他格式的图像文件

//下边是一个从磁盘读取任一BMP文件的函数,然后显示在窗体指定坐标上。

OnOpenBMPImage()

{

CFileDialog fileDlg(true,(LPCTSTR)_T("BMP file"),(LPCTSTR)_T("*.bmp"),OFN_HIDEREADONLY,(LPCTSTR)_T("BMP FILE|*.bmp"),NULL)

if(fileDlg.DoModal() == IDOK)

{

HBITMAP m_hBmp=(HBITMAP)LoadImage(NULL,fileDlg.GetPathName(),IMAGE_BITMAP,0,0,LR_LOADFROMFILE)

CClientDC dc(this)

CBitmap bmp

bmp.Attach(m_hBmp)

CDC memdc

memdc.CreateCompatibleDC(&dc)

memdc.SelectObject(&bmp)

BITMAP BitInfo

bmp.GetBitmap(&BitInfo)

int x = BitInfo.bmWidth

int y = BitInfo.bmHeight

dc.BitBlt(0,0,x,y,&memdc,0,0,SRCCOPY)

bmp.Detach()

memdc.DeleteDC()

}

UpdateData(false)

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/bake/11949891.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-19
下一篇 2023-05-19

发表评论

登录后才能评论

评论列表(0条)

保存