各位高手,如何将两个CBitmap实例储存到一个文件中?挺烦人的:(

micrack 2001-04-15 01:03:00
如题
谢了先
...全文
219 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hooligan 2001-04-22
  • 打赏
  • 举报
回复
因为你的程序中是知道位图的尺寸和颜色信息的,那么你就把它当作一个二进制流来存不就是了,格式可以由你自己定义。
Phourm 2001-04-22
  • 打赏
  • 举报
回复
你是要拼接两个位图吗?左右还是上下?
把它们copy到一个内存DC中再保存不行吗?
CandyCat 2001-04-22
  • 打赏
  • 举报
回复
其实我也有着相同的疑惑,看看这个贴子吧:

http://www.csdn.net/expert/topic/86/86168.shtm
CandyCat 2001-04-22
  • 打赏
  • 举报
回复
给你一个函数看看吧,写得很烂,希望有用
在这个函数中,我先将两幅BMP图打开,然后在存到一起。
BOOL CCheckDoc::SaveFileName(LPCTSTR fn)
{
UINT flag = 30001;
DWORD bmpFileSize,dwRet;
CFile bmpfile,savefile;
LPSTR pBits;

//存入第一幅图
if (!bmpfile.Open("c:\\Windows\\temp\\~$test.bmp",CFile::modeRead | CFile::shareDenyWrite))
return FALSE;

bmpFileSize = bmpfile.GetLength();
if (!savefile.Open(fn,CFile::modeCreate | CFile::modeWrite | CFile::shareDenyRead))
return FALSE;
savefile.Write(&flag,sizeof(UINT));
savefile.Write (&bmpFileSize,sizeof(DWORD));//存入第一幅图的字节数

pBits = (LPSTR)CreateMemoryBlockFromAddress((LPVOID)NULL,
(DWORD)(bmpFileSize));
if (!pBits)
return FALSE;

dwRet = bmpfile.ReadHuge((void*)pBits,bmpFileSize);
if (dwRet != bmpFileSize)
{
::free(pBits);
return FALSE;
}
savefile.WriteHuge ((void*)pBits,bmpFileSize);
bmpfile.Close();//关闭第一幅图


//存入第二幅图
if (!bmpfile.Open("c:\\Windows\\temp\\~$test2.bmp",CFile::modeRead | CFile::shareDenyWrite))
return FALSE;

bmpFileSize = bmpfile.GetLength();
savefile.Write (&bmpFileSize,sizeof(DWORD));//存入第二幅图的字节数

//读出第二幅图的数据
dwRet = bmpfile.ReadHuge((void*)pBits,bmpFileSize);
if (dwRet != bmpFileSize)
{
::free(pBits);
return FALSE;
}
//写入第二幅图的数据
savefile.WriteHuge ((void*)pBits,bmpFileSize);

::free(pBits);//释放资源

savefile.Close();
bmpfile.Close ();
return TRUE;
}
vcbear 2001-04-22
  • 打赏
  • 举报
回复
要储存位图,不考虑BITMAPFILEHEADER、BITMAPINFOHEADER基本不是很可能。至少我
想不出什么别的好办法。
我只能提一个技巧:你可以先把这两个位图一起BitBlt到同一个DC里,然后就可以一次
从DC里通过GetDIBits函数获得位图数据,并填写BITMAPFILEHEADER、BITMAPINFOHEADER
结构,这时位图数据对于你来说就是一些二进制的串,调用文件操作函数随便写入什么文件
都行。
micrack 2001-04-22
  • 打赏
  • 举报
回复
i am waiting……
micrack 2001-04-19
  • 打赏
  • 举报
回复
to xiaoy():
我想存成文件,而且什么文件都成!有什么办法吗?
xiaoy 2001-04-18
  • 打赏
  • 举报
回复
你想把它存起来干什么用?是存成一个文件还是只让它在内存中,如果是存成文件的话,你想存为什么文件,或者什么文件都成???
micrack 2001-04-18
  • 打赏
  • 举报
回复
sos
jumbo6 2001-04-16
  • 打赏
  • 举报
回复
a
micrack 2001-04-16
  • 打赏
  • 举报
回复
谢谢
micrack 2001-04-16
  • 打赏
  • 举报
回复
如果要是不储存为BMP文件,行吗?我只想把两个内存位图储存起来
请帮帮忙,谢谢
xiaoy 2001-04-15
  • 打赏
  • 举报
回复
根据BMP文件的结构,用CFile新建一个文件,然后把相关结构先在内存中构建好,再write到文件中不行吗?
比如说一个256色文件,把BITMAPFILEHEADER、BITMAPINFOHEADER、调色板项、位图数据等内容write到文件中。
micrack 2001-04-15
  • 打赏
  • 举报
回复
i am waiting……
micrack 2001-04-15
  • 打赏
  • 举报
回复
我就是直接实例化了两个位图
像这样:CBitmap bmp1,bmp2;
如果要用CBitmap::Serialize是不是还要自己写Serialize函数,CBitmap里的好象是虚函数
joke100 2001-04-15
  • 打赏
  • 举报
回复
那个文件使用序列化Serialize吗?

16,467

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

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

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