RT,MFC,编程环境是VC6.0,没法用CImage,请问用什么函数可以在窗口制定位置显示图片?
------解决思路----------------------
给你个显示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分配的内存!
以上是我程序中的片段,仅供分析和参考!
------解决思路----------------------
可以显示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;
}