MFC 怎么在指定位置显示指定路径的图片?

seu_sk1996 2015-09-09 10:33:59
RT,MFC,编程环境是VC6.0,没法用CImage,请问用什么函数可以在窗口制定位置显示图片?
...全文
1108 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
tangchu4420 2017-10-24
  • 打赏
  • 举报
回复
怎么做到的呢
seu_sk1996 2015-09-12
  • 打赏
  • 举报
回复
谢谢大家,我已经找到答案了,利用编辑框,可以显示jpg,bmp格式的图片
瀚海一漂 2015-09-09
  • 打赏
  • 举报
回复
MSDN:
Loading and Displaying Bitmaps

Image image(L"Grapes.jpg");
graphics.DrawImage(&image, 60, 10);


阿源是少年 2015-09-09
  • 打赏
  • 举报
回复
bitmap的绘制函数很多,主要是bitblt
笨笨仔 2015-09-09
  • 打赏
  • 举报
回复
给你个显示BMP例子自己推敲 1、设置成员变量

	// BITMAPINFO结构指针
	BITMAPINFO *m_pBMI;
	// DIB图像数据指针
	byte *m_pDIBData;
2、从文件中读出图片

// 取位图文件
void CComHelpDlg::ShowBmp(CString name)
{
	CFile f1;
	BITMAPFILEHEADER bfh;								// 位图头结构
	BITMAPINFO binfo;									// 位图信息结构
	int len;

	// 打开图像文件
	if(!f1.Open(name,CFile::modeRead | CFile::typeBinary))		// 打开位图文件
		return;
	if(f1.Read(&bfh,sizeof(bfh))!=sizeof(bfh))						// 读信息头
		return;
	if(bfh.bfType!=19778)								// 判定是否为BMP文件
		return;	
	if(f1.Read(&binfo,sizeof(BITMAPINFO))!=sizeof(BITMAPINFO))		// 读位图信息
	{
		return;
	}
	len=binfo.bmiHeader.biSizeImage;							// 数据文件长
	// 位图信息
	BITMAPINFO *pBMI=(BITMAPINFO *)new byte[sizeof(BITMAPINFOHEADER)];	// 信息转存
	memcpy(pBMI,&binfo,sizeof(BITMAPINFOHEADER));
	// 位图数据
	byte *pDIBData=new byte[len];

	// 读入位图数据
	f1.Seek(bfh.bfOffBits,CFile::begin);
	if(f1.Read(pDIBData,len)!=len)
		return;
	f1.Close();													// 关闭文件
	if(m_pBMI!=NULL)
		delete m_pBMI;
	m_pBMI=pBMI;
	if(m_pDIBData!=NULL)
		delete m_pDIBData;
	m_pDIBData=pDIBData;
	m_fBitBk=true;											// 已经设置了背景
}
3、显示图片

// 显示位图
void CComHelpDlg::Show(CDC * pDC, int nLeft, int nTop, int nWidth, int nHeight)
{
	pDC->SetStretchBltMode(COLORONCOLOR);
	StretchDIBits(pDC->GetSafeHdc(),
					nLeft,
					nTop,
					nWidth,
					nHeight,
					0,
					0,
					m_pBMI->bmiHeader.biWidth,
					m_pBMI->bmiHeader.biHeight,
					m_pDIBData,
					m_pBMI,
					DIB_RGB_COLORS,
					SRCCOPY);
}
使用完成后注意释放用new分配的内存! 以上是我程序中的片段,仅供分析和参考!
worldy 2015-09-09
  • 打赏
  • 举报
回复
Bitblt可以指定任意位置,任意大小
schlafenhamster 2015-09-09
  • 打赏
  • 举报
回复
“编程环境是VC6.0,没法用CImage” CImage 也是用 GDI+ 所以直接用 Gdiplus
gz_qmc 2015-09-09
  • 打赏
  • 举报
回复
如果你需要更丰富多彩的功能,可以使用CxImage
gz_qmc 2015-09-09
  • 打赏
  • 举报
回复
由于每次画图都要打开文件 所以,如果你功力够用 你完全可以将之完善成你自己的类
gz_qmc 2015-09-09
  • 打赏
  • 举报
回复
可以显示JPG,BMP的函数,如果显示GIF,只可以显示第一帧 你可以把该函数添加成你的类的成员函数也可以 在画图函数里调用就可以了 比如: void xxx::OnPaint() { CPaintDC dc(this); ShowPic(&dc,"C:\\A.jpg",0,0,100,200); }
BOOL  ShowPic(CDC *pDC,CString lpstrFile,int sx,int sy,int nScrWidth, int nScrHeight)
{
	IPicture  *pPic;  
	IStream   *pStm;  
	BOOL      bResult;  

	HANDLE    hFile=NULL;  
	DWORD     dwFileSize,dwByteRead;  
	//打开硬盘中的图形文件  
	hFile=CreateFile(lpstrFile,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);  
	if (hFile!=INVALID_HANDLE_VALUE)  
	{  
		dwFileSize=GetFileSize(hFile,NULL);//获取文件字节数  
		if(dwFileSize==0xFFFFFFFF)  
		{
			CloseHandle(hFile);
			return FALSE;  
		}
	}  
	else  
	{  
		return FALSE;  
	}  

	//分配全局存储空间  
 	HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,dwFileSize);  
	if(hGlobal==NULL)  	return FALSE;  

 	LPVOID  pvData =GlobalLock(hGlobal);  
	if(pvData==NULL)//锁定分配内存块  
 	{
		GlobalFree(hGlobal);
		return FALSE;  
    }
	ReadFile(hFile,pvData,dwFileSize,&dwByteRead,NULL);//把文件读入内存缓冲区  
 	CloseHandle(hFile);//关闭打开的文件  

 	GlobalUnlock(hGlobal);  
	CreateStreamOnHGlobal(hGlobal,TRUE,&pStm);  

 	//装入图形文件  
	bResult=OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);  
 	GlobalFree(hGlobal);

	if(FAILED(bResult))  return FALSE;  

 	long   hmWidth;//图片的真实宽度  
 	long   hmHeight;//图片的真实高度  
 	pPic->get_Width(&hmWidth);  
	pPic->get_Height(&hmHeight);  

	//将图形输出到屏幕上(有点像BitBlt)  
	bResult=pPic->Render(pDC->m_hDC,sx,sy,nScrWidth,nScrHeight,0,hmHeight,hmWidth,-hmHeight,NULL);  
	pPic->Release();  

	return   TRUE;  
}

19,469

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧