关于BMP文件的问题

llm308 2002-03-21 07:39:19
各位高手,有谁会编一个显示BMP文件的程序(即通过BMP文件内容一个像素一个象素的显示)。如果有源代码一定高分相送,谢谢!!!
...全文
45 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
AloneWolf 2002-03-22
  • 打赏
  • 举报
回复
以前用DirectX时看见过,很复杂,因为bmp有256色、16位色和24位色等,而
当前显示环境也有256色、16位色和24位色等,从每种bmp画到每种显示环境的
函数都是不同的。
Holly 2002-03-22
  • 打赏
  • 举报
回复
建议你不要使用Creamdog的程序,那有缺陷,还不能认识所有的BMP格式,我敢保证OS/2格式的BMP将导致程序崩掉。(很遗憾,网络上的大多数读取BMP的程序都有这个缺陷,相信都是因为是学习过程中的非产品化代码,不可靠)
jiangsheng的也许可以,但我没有试过。

如果你有需要的话,建议你完整了解一下BMP的头结构,你就知道为何CreamDog的代码有缺陷了。
aawolf 2002-03-21
  • 打赏
  • 举报
回复
hehe
guopo 2002-03-21
  • 打赏
  • 举报
回复
THE MAIL SENT,PLEASE CHECK,PLEASE READ README.TXT FIRST.
蒋晟 2002-03-21
  • 打赏
  • 举报
回复
http://www.csdn.net/Develop/article/12/12866.shtm
fireseed 2002-03-21
  • 打赏
  • 举报
回复
/*************************感谢关注************************/
//////////////////////////Creamdog/////////////////////////

发了,别忘了给我加分。再7分我就三颗小三解了,呵呵,七分就行,不过你要全给我也不介意.....
llm308 2002-03-21
  • 打赏
  • 举报
回复
谢谢了!!!
liming308@0451.com
guopo 2002-03-21
  • 打赏
  • 举报
回复
i will give u the whole code.
not CDib,but a winapi lib,if you want leave ur email box.
i will send to u as soon as possible.
guopo 2002-03-21
  • 打赏
  • 举报
回复
give me your email.
this sourcecode can only display 256 gray bitmap,
do you want to have?
fireseed 2002-03-21
  • 打赏
  • 举报
回复
/*********************感谢关注************************/
//////////////////////Creamdog/////////////////////////

以下代码摘自我用API写的一个CDib类。如果需要全部代码请在给我的留言中留下你的e-mail,并附上你的问题。

BOOL CDib::ReadFileSection(HANDLE hFile,
LPVOID lpBuffer,
DWORD Offset,
DWORD nNumberOfByteRead)
{
BOOL result = TRUE;
DWORD dwNumberReaded;
LPOVERLAPPED lpOverlapped=new OVERLAPPED;

lpOverlapped->hEvent=0;
lpOverlapped->Offset=Offset;
lpOverlapped->OffsetHigh=0;

result = ReadFile(hFile, //Read date from the file
lpBuffer,
nNumberOfByteRead, //nFileSize
&dwNumberReaded,
lpOverlapped
);

delete lpOverlapped;

return result;
}

BOOL CDib::WriteFileSection(HANDLE hFile,
LPVOID lpBuffer,
DWORD Offset,
DWORD nNumberOfByteWrite)
{
BOOL result = TRUE;
DWORD dwNumberWrited;
LPOVERLAPPED lpOverlapped=new OVERLAPPED;

lpOverlapped->hEvent=0;
lpOverlapped->Offset=Offset;
lpOverlapped->OffsetHigh=0;

result = WriteFile(hFile, //Read date from the file
lpBuffer,
nNumberOfByteWrite, //nFileSize
&dwNumberWrited,
lpOverlapped
);

delete lpOverlapped;

return TRUE;

}

BOOL CDib::LoadBitmapFile(LPCTSTR lpFileName)
{
BOOL result;
DWORD nDataSize;
HANDLE hFile;

//Create a file
hFile = CreateFile(lpFileName,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL);

//Read file header
result = ReadFileSection(hFile,(LPVOID)&m_FileHeader,0,sizeof(BITMAPFILEHEADER));
if(m_FileHeader.bfType!='MB' || !result)
return FALSE;


//Read info header
nDataSize = m_FileHeader.bfOffBits - sizeof(BITMAPFILEHEADER);
result = ReadFileSection(hFile,(LPVOID)&m_Info,sizeof(BITMAPFILEHEADER),nDataSize);
if( !result )
return FALSE;

//Read image data
nDataSize = GetFileSize( hFile, NULL );
nDataSize = nDataSize - m_FileHeader.bfOffBits;
m_lpImageData = new char[nDataSize];
result = ReadFileSection( hFile, m_lpImageData, m_FileHeader.bfOffBits, nDataSize );
if( !result )
return FALSE;

return TRUE;
}


BOOL CDib::SaveTo( LPCTSTR lpFileName)
{
BOOL result;
DWORD nDataSize;
HANDLE hFile;

//Create a file
hFile = CreateFile(lpFileName,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
NULL);

//写文件头
result = WriteFileSection(hFile,(LPVOID)&m_FileHeader,0,sizeof(BITMAPFILEHEADER));
if(m_FileHeader.bfType!='MB' || !result)
return FALSE;


//写信息头
nDataSize = m_FileHeader.bfOffBits - sizeof(BITMAPFILEHEADER);
result = WriteFileSection(hFile,(LPVOID)&m_Info,sizeof(BITMAPFILEHEADER),nDataSize);
if( !result )
return FALSE;

//写DIB数据
nDataSize = m_Info.bmiHeader.biSizeImage;
result = WriteFileSection( hFile, m_lpImageData, m_FileHeader.bfOffBits, nDataSize );
if( !result )
return FALSE;

return TRUE;
}

BOOL CDib::Create( LPCTSTR lpFileName, HDC hdc )
{
//重置所有信息
Reset();

//处理DC
m_hdc = hdc;
m_nDCState = SaveDC(m_hdc);

//读取BMP文件
if( !LoadBitmapFile(lpFileName) )
return FALSE;

//输出位图
UpdateObject(NULL);

return TRUE;
}

16,551

社区成员

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

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

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