导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

请问怎样打开一幅图片

amartapple 2002-07-27 09:25:40
请问怎样打开一幅图片,要求用纯c++代码,不要mfc,你会打开什么格式都可以告诉我
谢谢
...全文
10 点赞 收藏 3
写回复
3 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zhangjianwen 2002-07-27
不同的图片,格式不一样,当然程序不一样!!!!!!
回复
hzsagile 2002-07-27
BOOL CDIB::OpenBMP(const CString& csFileName)
{
BITMAPFILEHEADER bFile;
BITMAPINFOHEADER head;
CFile file;


if(!file.Open(csFileName,CFile::modeRead | CFile::typeBinary))
{
return FALSE;
}

file.Read(&bFile,sizeof(bFile));
if(memcmp((void *)&bFile.bfType,"BM",2))
{
file.Close();
return FALSE;
}
file.Read(&head,sizeof(head));
if(!Create(head))
{
file.Close();
return FALSE;
}
file.Read(m_pRGB,sizeof(RGBQUAD)*GetPaletteSize());
file.Seek(bFile.bfOffBits,CFile::begin);
file.Read(m_pBits,height*bytes);
file.Close();
return TRUE;

}

BOOL CDIB::Create(BITMAPINFOHEADER& bmInfo)
{


bytes = (bmInfo.biBitCount*bmInfo.biWidth)>>3;
height = bmInfo.biHeight;
width = bmInfo.biWidth;
// bmInfo.biHeight *= -1;
pctlPrgLS->SetRange(0, 100);
pctlPrgLS->SetPos(0);
pctlPrgLS->SetStep(1);

while(bytes%4) bytes++;

int size;
size = sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*GetPaletteSize(bmInfo) + bytes*height;
m_pVoid = (void *)malloc(size);
if(!m_pVoid) return FALSE;

m_pInfo = (PBITMAPINFO )m_pVoid;
memcpy((void *)&m_pInfo->bmiHeader,(void *)&bmInfo,sizeof(BITMAPINFOHEADER));
m_pRGB = (RGBQUAD *)((unsigned char *)m_pVoid + sizeof(BITMAPINFOHEADER)) ;
m_pBits = (unsigned char *)(m_pVoid) + sizeof(BITMAPINFOHEADER) + sizeof(RGBQUAD)*GetPaletteSize();

__int64 i;
BYTE **ptr;
m_pLinePtr = (BYTE **)malloc(sizeof(BYTE *)*height);
if(!m_pLinePtr) return FALSE;
if (pctlPrgLS->GetPos()!=0)
pctlPrgLS->SetPos(0);
int iStep = 1;
for(i=0,ptr=m_pLinePtr; i < height; i++,ptr++)
{
//*ptr = (int)(m_pBits)+(i*bytes);
//*ptr = (int)GetLinePtr(i);
if (i >= (__int64)((height/100)*iStep))
{
pctlPrgLS->StepIt();
iStep++;
}
*ptr = m_pBits + (height-i-1)*bytes;
}
if (pctlPrgLS->GetPos()!=100)
pctlPrgLS->SetPos(100);

m_nFlags = 0;
return TRUE;
}

nt CDIB::GetPaletteSize()
{
return GetPaletteSize(m_pInfo->bmiHeader);
}
回复
shu 2002-07-27
mfc在其中并不起什么作用,C++技术内幕6。0 有个CDIB类很好用,基本上都是API调用。
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……