关于jpg的问题 怎么样显示一张jpg图,最好有源代码,谢谢[email protected] 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 void CJpgTestDlg::OnButton1() { // TODO: Add your control notification handler code here IStream *pStm; CFileStatus fstatus; CFile file; LONG cb; CRect r_Show; HDC hdc; IPicture *pPic; CString m_PhotoPath; static char BASED_CODE szFilter[] = "Gif Files (*.gif)|*.gif|Jpeg Files (*.jpg)|*.jpg|All Files (*.*)|*.*||"; CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter); dlg.DoModal(); m_PhotoPath = dlg.GetPathName( ); m_Show.GetClientRect(r_Show); int xpos=r_Show.left; int ypos=r_Show.top; int Widthpos=r_Show.Width(); int heightpos=r_Show.Height(); if (file.Open(m_PhotoPath,CFile::modeRead)&&file.GetStatus(m_PhotoPath,fstatus)&& ((cb = fstatus.m_size) != -1)) { HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb); LPVOID pvData = NULL; if (hGlobal != NULL) { if ((pvData = GlobalLock(hGlobal)) != NULL) { file.ReadHuge(pvData, cb); GlobalUnlock(hGlobal); CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic))) { OLE_XSIZE_HIMETRIC hmWidth; OLE_YSIZE_HIMETRIC hmHeight; pPic->get_Width(&hmWidth); pPic->get_Height(&hmHeight); double fX,fY; fX = r_Show.Width(); fY = r_Show.Height(); hdc=::GetDC(m_Show.m_hWnd); if(FAILED(pPic->Render(hdc,xpos,ypos,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL))) AfxMessageBox("Failed To Render The picture!"); } else AfxMessageBox("Error Loading Picture From Stream!"); } } GlobalFree(hGlobal); } else AfxMessageBox("Can't Open Image File!"); } vc 7使用CImage 类vc 6可以使用IPicture的com 上面的代码太长了,给你一个简单一点的:在 papaya_stone(^_^)shentong(^_^) 的帮助下,我完成了从网络上读取(jpg,gif,bmp等)文件的函数,提供给大家使用。本函数从一个指定的url(也可以是文件的路径)读入图形文件,最后返回一个HBITMAP。//程序如下:我是在vs.net下编译的,希望适用于vc6。并请大家参考://http://www.csdn.net/expert/topic/978/978944.xml?temp=.4329645#include <atlbase.h>#include <olectl.h>#include <atlwin.h>HBITMAP LoadBitmapFromURL(HWND hWnd, LPOLESTR pszURL){ IPicture* pp = NULL; OLE_XSIZE_HIMETRIC nMetricX = 0, nMetricY = 0; int nWidth = 0, nHeight = 0; HDC hdc = NULL, hDCDst = NULL; HBITMAP hBitmap = NULL, hBmpOld = NULL; BOOL bOk = FALSE; __try{ if(FAILED(OleLoadPicturePath(pszURL, NULL, 0, RGB(0,0,0), IID_IPicture, (LPVOID*)&pp))) __leave; if((hdc = GetDC(hWnd)) == NULL) __leave; pp->get_Width(&nMetricX); pp->get_Height(&nMetricY); nWidth = MAP_LOGHIM_TO_PIX(nMetricX, GetDeviceCaps(hdc, LOGPIXELSX)); nHeight = MAP_LOGHIM_TO_PIX(nMetricY, GetDeviceCaps(hdc, LOGPIXELSY)); if((hDCDst = ::CreateCompatibleDC(hdc)) == NULL) __leave; if((hBitmap = ::CreateCompatibleBitmap(hdc, nWidth, nHeight)) == NULL) __leave; hBmpOld = (HBITMAP)::SelectObject(hDCDst, hBitmap); if(FAILED(pp->Render(hDCDst, 0, nHeight, nWidth, -nHeight, 0, 0, nMetricX, nMetricY, NULL))) __leave; bOk = TRUE; } __finally { if(hBmpOld != NULL) ::SelectObject(hDCDst, hBmpOld); if(!bOk && hBitmap != NULL) { ::DeleteObject(hBitmap); hBitmap = NULL; } if(hDCDst != NULL) ::DeleteDC(hDCDst); if(hdc != NULL) ::ReleaseDC(hWnd, hdc); if(pp != NULL) pp->Release(); } return hBitmap;} zhangyilan(数字通信) 你的代码没问题,编译没错,但就是出不来,为什么?? zhangyilan(数字通信) 你的代码没问题,编译没错,但就是出不来,为什么?? #define ASSERT(f) ((void)0)请高手解释一下这句话的含义和作用 求助,绘制渐开线问题。。。。 请问大虾们VC的编辑框控件只能接收有限个字符 about smard card reader ODBC调用复杂EXCEL表格中的字段名中的SQL查询问题 怎么通过event的句柄得到该event的名字? 如何处理键盘响应? WriteFile()返回值的错误吗?! 弱弱的问 如何把不同大小的BMP文件产生一个avi文件 有关用ATL写OLE DB数据消费者的问题,请各位高手指教: 哪里有winme操作系统下载?
{
// TODO: Add your control notification handler code here
IStream *pStm;
CFileStatus fstatus;
CFile file;
LONG cb;
CRect r_Show;
HDC hdc;
IPicture *pPic;
CString m_PhotoPath;
static char BASED_CODE szFilter[] = "Gif Files (*.gif)|*.gif|Jpeg Files (*.jpg)|*.jpg|All Files (*.*)|*.*||";
CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,szFilter);
dlg.DoModal();
m_PhotoPath = dlg.GetPathName( ); m_Show.GetClientRect(r_Show);
int xpos=r_Show.left;
int ypos=r_Show.top;
int Widthpos=r_Show.Width();
int heightpos=r_Show.Height(); if (file.Open(m_PhotoPath,CFile::modeRead)&&file.GetStatus(m_PhotoPath,fstatus)&& ((cb = fstatus.m_size) != -1))
{
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, cb);
LPVOID pvData = NULL;
if (hGlobal != NULL)
{
if ((pvData = GlobalLock(hGlobal)) != NULL)
{
file.ReadHuge(pvData, cb);
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); if(SUCCEEDED(OleLoadPicture(pStm,fstatus.m_size,TRUE,IID_IPicture,(LPVOID*)&pPic)))
{
OLE_XSIZE_HIMETRIC hmWidth;
OLE_YSIZE_HIMETRIC hmHeight; pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight); double fX,fY;
fX = r_Show.Width();
fY = r_Show.Height();
hdc=::GetDC(m_Show.m_hWnd);
if(FAILED(pPic->Render(hdc,xpos,ypos,(DWORD)fX,(DWORD)fY,0,hmHeight,hmWidth,-hmHeight,NULL)))
AfxMessageBox("Failed To Render The picture!");
}
else
AfxMessageBox("Error Loading Picture From Stream!");
}
}
GlobalFree(hGlobal);
}
else
AfxMessageBox("Can't Open Image File!"); }
vc 6可以使用IPicture的com
在 papaya_stone(^_^)shentong(^_^) 的帮助下,我完成了从网络上读取(jpg,gif,bmp等)文件的函数,提供给大家使用。本函数从一个指定的url(也可以是文件的路径)读入图形文件,最后返回一个HBITMAP。//程序如下:我是在vs.net下编译的,希望适用于vc6。并请大家参考:
//http://www.csdn.net/expert/topic/978/978944.xml?temp=.4329645#include <atlbase.h>
#include <olectl.h>
#include <atlwin.h>HBITMAP LoadBitmapFromURL(HWND hWnd, LPOLESTR pszURL)
{
IPicture* pp = NULL;
OLE_XSIZE_HIMETRIC nMetricX = 0, nMetricY = 0;
int nWidth = 0, nHeight = 0;
HDC hdc = NULL, hDCDst = NULL;
HBITMAP hBitmap = NULL, hBmpOld = NULL;
BOOL bOk = FALSE; __try{
if(FAILED(OleLoadPicturePath(pszURL, NULL, 0, RGB(0,0,0), IID_IPicture, (LPVOID*)&pp)))
__leave;
if((hdc = GetDC(hWnd)) == NULL)
__leave;
pp->get_Width(&nMetricX);
pp->get_Height(&nMetricY);
nWidth = MAP_LOGHIM_TO_PIX(nMetricX, GetDeviceCaps(hdc, LOGPIXELSX));
nHeight = MAP_LOGHIM_TO_PIX(nMetricY, GetDeviceCaps(hdc, LOGPIXELSY)); if((hDCDst = ::CreateCompatibleDC(hdc)) == NULL)
__leave;
if((hBitmap = ::CreateCompatibleBitmap(hdc, nWidth, nHeight)) == NULL)
__leave;
hBmpOld = (HBITMAP)::SelectObject(hDCDst, hBitmap);
if(FAILED(pp->Render(hDCDst, 0, nHeight, nWidth, -nHeight, 0, 0, nMetricX, nMetricY, NULL)))
__leave;
bOk = TRUE;
}
__finally
{
if(hBmpOld != NULL) ::SelectObject(hDCDst, hBmpOld);
if(!bOk && hBitmap != NULL)
{
::DeleteObject(hBitmap);
hBitmap = NULL;
}
if(hDCDst != NULL) ::DeleteDC(hDCDst);
if(hdc != NULL) ::ReleaseDC(hWnd, hdc);
if(pp != NULL) pp->Release();
} return hBitmap;
}
你的代码没问题,编译没错,但就是出不来,为什么??
你的代码没问题,编译没错,但就是出不来,为什么??