百度,GOOGLE了半天,搜了好多代码,但都没尝试成功。吐了吐了,不研究了,赶时间,会的兄弟帮个忙,万分感谢。在VS2005中,新建了MFC项目,用对话框。在对话框中拖了个picture control出来。利用CString储存图片文件的路径,但这图片可能是JPG,GIF,PNG,BMP等各种图片。请麻烦给段代码,我要加在哪里,怎么做才能把图片显示在固定大小的picture control中,也就是说自动缩放。
我连显示都显示不出来,晕。假设
picture control的ID为:IDC_indexPhoto
储存路径的CString为:filename
对话框为:CpictureDlg我究竟应该在哪里加代码才能显示,而且自动缩放显示呢???麻烦详细点
我连显示都显示不出来,晕。假设
picture control的ID为:IDC_indexPhoto
储存路径的CString为:filename
对话框为:CpictureDlg我究竟应该在哪里加代码才能显示,而且自动缩放显示呢???麻烦详细点
{
// TODO: Add your message handler code here and/or call default
/*
CImage img; //JPG / JPEG / GIF / PNG 格式的图片
HRESULT ret = img.Load(”c:\\1.jpg“); // filename 是要加载的文件名(包含路径)
HBITMAP bitmap = img.Detach(); CBitmap bmp = CBitmap::FromHandle(bitmap );
CRect rect;
GetClientRect(&rect);
CDC dc;
dc.CreateCompatibleDC(pDC);
CBitmap* pOldBitmap = dc.SelectObject(&bmp );
int bmw, bmh ;
BITMAP bmap;
m_bitmap.GetBitmap(&bmap);
bmw = bmap.bmWidth;
bmh = bmap.bmHeight;
//StretchBlt进行缩放
pDC->StretchBlt(0, 0, rect.Width(),
rect.Height(), &dc,
0, 0,bmw,bmh, SRCCOPY);
dc.SelectObject(pOldBitmap);
*/
return TRUE;
}
HRESULT ret = img.Load(”c:\\1.jpg“); // filename 是要加载的文件名(包含路径)
HBITMAP bitmap = img.Detach(); CBitmap bmp = CBitmap::FromHandle(bitmap );
这一段还是放到另外一个地方初始化后使用吧,不用经常Load
还有就是不要用picture control,用一般的static control就行了
{
CPaintDC paintDC(this);
::CoInitialize(NULL); // COM 初始化
HRESULT hr;
CFile file;
file.Open( "c:\\aa.jpg", CFile::modeRead | CFile::shareDenyNone ); // 读入文件内容
DWORD dwSize = file.GetLength();
HGLOBAL hMem = ::GlobalAlloc( GMEM_MOVEABLE, dwSize );
LPVOID lpBuf = ::GlobalLock( hMem );
file.ReadHuge( lpBuf, dwSize );
file.Close();
::GlobalUnlock( hMem ); IStream * pStream = NULL;
IPicture * pPicture = NULL;
// 由 HGLOBAL 得到 IStream,参数 TRUE 表示释放 IStream 的同时,释放内存
hr = ::CreateStreamOnHGlobal( hMem, TRUE, &pStream );
ASSERT ( SUCCEEDED(hr) );
hr = ::OleLoadPicture( pStream, dwSize, TRUE, IID_IPicture, ( LPVOID * )&pPicture );
ASSERT(hr==S_OK);
long nWidth,nHeight; // 宽高,MM_HIMETRIC 模式,单位是0.01毫米
pPicture->get_Width( &nWidth ); // 宽
pPicture->get_Height( &nHeight ); // 高
////////原大显示//////
CSize sz( nWidth, nHeight );
pDC->HIMETRICtoDP( &sz ); // 转换 MM_HIMETRIC 模式单位为 MM_TEXT 像素单位
pPicture->Render(paintDC.m_hDC,0,0,sz.cx,sz.cy,
0,nHeight,nWidth,-nHeight,NULL);
////////按窗口尺寸显示////////
// CRect rect; GetClientRect(&rect);
// pPicture->Render(paintDC.m_hDC,0,0,rect.Width(),rect.Height(),
// 0,nHeight,nWidth,-nHeight,NULL); if ( pPicture ) pPicture->Release();// 释放 IPicture 指针
if ( pStream ) pStream->Release(); // 释放 IStream 指针,同时释放了 hMem
::CoUninitialize();
}
CRect rect;
m_FrameDisplay.GetClientRect(&rect); //m_FrameDisplay为Picture Control控件变量,获得控件的区域对象 CImage image; //使用图片类
image.Load(G_FramePath); //装载路径下图片信息到图片类
CDC* pDC = m_FrameDisplay.GetWindowDC(); //获得显示控件的DC
image.Draw( pDC -> m_hDC,rect); //图片类的图片绘制Draw函数
ReleaseDC(pDC);
未知各位如何解决显示的图片失真问题
你好,十分感谢。我用的是VS2005,用的是MFC,但未发现有static control这个控件哦。另外把显示的控件的IDC设置为什么?例如我设置为IDC_PIC
那么在你的代码中,如何绑定这个IDC_PIC因为我希望让用户输入路径,确认后显示图片。
用户重新输入别的路径,重新确认,又可再显示新的图片。望再详细一点,谢谢!!
我试过在View的OnDraw中用过。可以。