![]() |
#2
鸿蒙之灵2020-03-16 13:44
|
有如下问题:图片大小不一致,在显示的时候,我需要对对话框进行大小的重新设定,即先获取图片大小然后将对话框大小设置为匹配图片大小;
如何在知道图片路径及名称以及后缀名的情况下,将图片资源读取并显示在对应的pictrueControl控件中,每次显示图片要动态更新,该方案不将图片素材加入工程;
是否有比较全的功能代码,能够显示jpg格式图片最好,显示部分我暂时用的代码段如下:(当前代码运行一段时间后会触发中断)

void CPictureControl::OnPaint()
{
mPictureViewer.SetBitmap(NULL);//((CStatic*)GetDlgItem(IDC_STATIC_PHOTO))->SetBitmap(NULL);
this->RedrawWindow();
//定义变量存储图片信息
BITMAPINFO *pBmpInfo; //记录图像细节
BYTE *pBmpData; //图像数据
BITMAPFILEHEADER bmpHeader; //文件头
BITMAPINFOHEADER bmpInfo; //信息头
CFile bmpFile; //记录打开文件
//以仅仅读的方式打开文件 读取bmp图片各部分 bmp文件头 信息 数据
if(!bmpFile.Open(m_filename, CFile::modeRead|CFile::typeBinary))
return;
if (bmpFile.Read(&bmpHeader,sizeof(BITMAPFILEHEADER)) != sizeof(BITMAPFILEHEADER))
return;
if (bmpFile.Read(&bmpInfo,sizeof(BITMAPINFOHEADER)) != sizeof(BITMAPINFOHEADER))
return;
pBmpInfo = (BITMAPINFO *)new char[sizeof(BITMAPINFOHEADER)];
//为图像数据申请空间
memcpy(pBmpInfo,&bmpInfo,sizeof(BITMAPINFOHEADER));
DWORD dataBytes = bmpHeader.bfSize - bmpHeader.bfOffBits;
pBmpData = (BYTE*)new char[dataBytes];
bmpFile.Read(pBmpData,dataBytes);
bmpFile.Close();
//显示图像
CWnd *pWnd=GetDlgItem(IDC_PIC); //获得pictrue控件窗体的句柄
CRect rect;
pWnd->GetClientRect(&rect); //获得pictrue控件所在的矩形区域
CDC *pDC=pWnd->GetDC(); //获得pictrue控件的DC
pDC->SetStretchBltMode(COLORONCOLOR);
StretchDIBits(pDC->GetSafeHdc(),0,0,rect.Width(),rect.Height(),0,0,bmpInfo.biWidth,bmpInfo.biHeight,pBmpData,pBmpInfo,DIB_RGB_COLORS,SRCCOPY);
}