最近写个程序,其中需要打开一副png格式的图片,不过vc中好像没有直接提供支持的类或函数啊,各位高手们帮帮忙吧~~~~~~~~~~~~~~~~
解决方案 »
- 【求助】DDK编译问题
- 懂手机的进来拿分
- vc中dynamic_cast,下列程序转换指针类型,怎么不成功??/display是虚函数,graduatestudent是student的子类
- 在server端创建socket时如果指定SOCK_STREAM属性,是不是意味着在accept 时会一直block直到有连接到来? 还有,如果client端没有发送消息
- 一个关于定时器SetTimer的小小问题
- 各位英雄!怎样尽快的掌握COM技术?需要什么基础知识?有哪些经典的教材可看?如能提供下载地址,不胜感激!
- 为什么写了一个atl dll,用vb调用可以正常使用,而在Web中调用失败
- vc中怎样提取一文件指定列数据
- 不管用samrt,还是用汇编取硬盘序列号,始终出现偶尔取的不成功,循环取100次,总有n次失败,怎么可能出现该现象
- 在Propertysheet中给按钮"ok"加消息映射函数怎么加?
- OpenGL中在将矩形纹理转化为梯形(VC++)急
- 如何实现这种风格的全屏?
{
HDC hDC_Temp=GetDC(hWnd); 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)
return E_FAIL;
}
else
{
return E_FAIL;
}
//分配全局存储空间
HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE, dwFileSize);
LPVOID pvData = NULL; if (hGlobal == NULL)
return E_FAIL; if ((pvData = GlobalLock(hGlobal)) == NULL)//锁定分配内存块
return E_FAIL; ReadFile(hFile, pvData, dwFileSize, &dwByteRead, NULL);//把文件读入内存缓冲区
GlobalUnlock(hGlobal);
CreateStreamOnHGlobal(hGlobal, TRUE, &pStm); //装入图形文件
bResult = OleLoadPicture(pStm,dwFileSize,TRUE,IID_IPicture,(LPVOID*)&pPic);
if(FAILED(bResult))
return E_FAIL; OLE_XSIZE_HIMETRIC hmWidth;//图片的真实宽度
OLE_YSIZE_HIMETRIC hmHeight;//图片的真实高度
pPic->get_Width(&hmWidth);
pPic->get_Height(&hmHeight);
//将图形输出到屏幕上(有点像BitBlt) bResult = pPic->Render(hDC_Temp, 0, 0, nScrHeight, nScrWidth, 0, hmHeight, hmWidth, -hmHeight, NULL); pPic->Release();
CloseHandle(hFile);//关闭打开的文件 if (SUCCEEDED(bResult))
{
return S_OK;
}
else
{
return E_FAIL;
}
}
以上代码自己改吧,适合更多的图片格式
简单方便
毕竟我们没有必要去研究png等图像的编码原理
造汽车不必从炼铁开始
{
_ASSERT(lpstrFile);
USES_CONVERSION; // Create bitmap object and load image
auto_ptr<Bitmap> pBmp(new Bitmap(CT2CW(lpstrFile)));
if(!pBmp.get() || Ok != pBmp->LastStatus())
return E_FAILED; // Draw bitmap on DC
Graphic grp(hDC);
if(Ok != grp.DrawImage(pBmp.get(), X, Y, iWidth, iHeight))
return E_FAILED; return S_OK;
}