如何显示CFile中的图片

华亭真人 2009-02-24 05:40:39
我用CFile 读取了图片,放在了内存中,但是怎么把它显示在CStatic中呢?????????????
BOOL	bResult;
DWORD dwFileSize,dwByteRead;
dwFileSize=pFile->GetLength();
HGLOBAL hGlobal=GlobalAlloc(GMEM_MOVEABLE,dwFileSize);
LPVOID pvData=NULL;
if(hGlobal==NULL)
return false;
pvData=GlobalLock(hGlobal);
dwByteRead=pFile->Read(pvData,dwFileSize);
GlobalUnlock(hGlobal);


...全文
89 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hemdacker 2009-02-26
  • 打赏
  • 举报
回复
派生cstatic子类,在paint里用dc绘制bitmap
wnx_u 2009-02-26
  • 打赏
  • 举报
回复
bmp格式的好像可以这样打开
CDib m_dib; //声明一个Dib对象
HGLOBAL m_hDIB; //

定义指向DIB的句柄变量
CPalette* m_palDIB;

//定义指向逻辑调色板的指针
CSize m_sizeDoc;

//文档大小的变量
CFile file;
if (!file.Open(lpszPathName, CFile::modeRead))

// 打开文件
{
return FALSE;

// 返回FALSE
}
DeleteContents();
m_hDIB=m_dib.LoadFile(file); //调用ReadDIBFile

()读取图像
if(m_hDIB==NULL)
{
AfxMessageBox("图像格式不正确!"); //

提示出错
return FALSE;
}
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hDIB);
// 判断图像是否过大
if (m_dib.GetWidth(lpDIB) > INT_MAX ||m_dib.GetHeight(lpDIB) >

INT_MAX){
::GlobalUnlock((HGLOBAL) m_hDIB);
::GlobalFree((HGLOBAL) m_hDIB); // 释放DIB

对象
m_hDIB = NULL; //

设置DIB为空
AfxMessageBox("初始化失败");
return;
}
// 设置文档大小
m_sizeDoc = CSize((int)m_dib.GetWidth(lpDIB), (int)

m_dib.GetHeight(lpDIB));
::GlobalUnlock((HGLOBAL) m_hDIB);
m_palDIB = new CPalette;

// 创建新调色板
if (m_palDIB == NULL) //

判断是否创建成功
{
::GlobalFree((HGLOBAL) m_hDIB); // 失败
m_hDIB = NULL; //

设置DIB对象为空
return;
}
// 调用ConstructPalette来创建调色板
if (m_dib.ConstructPalette(m_hDIB, m_palDIB) == NULL)
{
delete m_palDIB;

// 删除
m_palDIB = NULL;

// 设置为空
return;

// 返回空
}
if (m_hDIB == NULL)

// 判断读取文件是否成功
{
AfxMessageBox("读取图像时出错"); //

提示出错
return FALSE;

// 返回FALSE
}

LPSTR lpDibSection = (LPSTR) ::GlobalLock(hDIB);


int cxDIB = (int) m_dib.GetWidth(lpDibSection); // 获取DIB宽度


int cyDIB = (int) m_dib.GetHeight(lpDibSection); // 获取DIB

高度
::GlobalUnlock(hDIB);
CRect rcDIB;
rcDIB.top = rcDIB.left = 0;
rcDIB.right = cxDIB;
rcDIB.bottom = cyDIB;
CRect rcDest= rcDIB;
CStatic m_DB;
//m_DB.create(....);
m_hDIB.DrawD
CDib m_dib; //声明一个Dib对象
HGLOBAL m_hDIB; //

定义指向DIB的句柄变量
CPalette* m_palDIB;

//定义指向逻辑调色板的指针
CSize m_sizeDoc;

//文档大小的变量
CFile file;
if (!file.Open(lpszPathName, CFile::modeRead))

// 打开文件
{
return FALSE;

// 返回FALSE
}
DeleteContents();
m_hDIB=m_dib.LoadFile(file); //调用ReadDIBFile

()读取图像
if(m_hDIB==NULL)
{
AfxMessageBox("图像格式不正确!"); //

提示出错
return FALSE;
}
LPSTR lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) m_hDIB);
// 判断图像是否过大
if (m_dib.GetWidth(lpDIB) > INT_MAX ||m_dib.GetHeight(lpDIB) >

INT_MAX){
::GlobalUnlock((HGLOBAL) m_hDIB);
::GlobalFree((HGLOBAL) m_hDIB); // 释放DIB

对象
m_hDIB = NULL; //

设置DIB为空
AfxMessageBox("初始化失败");
return;
}
// 设置文档大小
m_sizeDoc = CSize((int)m_dib.GetWidth(lpDIB), (int)

m_dib.GetHeight(lpDIB));
::GlobalUnlock((HGLOBAL) m_hDIB);
m_palDIB = new CPalette;

// 创建新调色板
if (m_palDIB == NULL) //

判断是否创建成功
{
::GlobalFree((HGLOBAL) m_hDIB); // 失败
m_hDIB = NULL; //

设置DIB对象为空
return;
}
// 调用ConstructPalette来创建调色板
if (m_dib.ConstructPalette(m_hDIB, m_palDIB) == NULL)
{
delete m_palDIB;

// 删除
m_palDIB = NULL;

// 设置为空
return;

// 返回空
}
if (m_hDIB == NULL)

// 判断读取文件是否成功
{
AfxMessageBox("读取图像时出错"); //

提示出错
return FALSE;

// 返回FALSE
}

LPSTR lpDibSection = (LPSTR) ::GlobalLock(hDIB);


int cxDIB = (int) m_dib.GetWidth(lpDibSection); // 获取DIB宽度


int cyDIB = (int) m_dib.GetHeight(lpDibSection); // 获取DIB

高度
::GlobalUnlock(hDIB);
CRect rcDIB;
rcDIB.top = rcDIB.left = 0;
rcDIB.right = cxDIB;
rcDIB.bottom = cyDIB;
CRect rcDest= rcDIB;
CStatic m_DB;
//m_DB.create(....);
m_hDIB.DrawDib(m_DB.GetDC()->m_hDC, &rcDest, m_hDIB , &rcDIB, pDoc->GetDocPal());
压缩格式的我不知道
lwx300 2009-02-24
  • 打赏
  • 举报
回复
//如果是载入位图,可以使用 LoadImage:

HBITMAP hBitmap = (HBITMAP)LoadImage(AfxGetInstanceHandle(), szFileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
m_tornado 2009-02-24
  • 打赏
  • 举报
回复
根据图片格式咯,还能怎么放?BMP?JPG?or others
不明白~

15,979

社区成员

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

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