我用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);
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);
不明白~
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());
压缩格式的我不知道