资源简介
用MFC中的单文档视图打开bmp图片,并显示

代码片段和文件信息
// ImageDib.cpp: implementation of the ImageDib class.
//
//////////////////////////////////////////////////////////////////////
#include “stdafx.h“
#include “SingleDocView.h“
#include “ImageDib.h“
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
ImageDib::ImageDib()
{
m_lpDib=NULL;
m_lpColorTable=NULL;
m_pImgData=NULL;
m_lpBmpInfoHead=NULL;
m_hPalette=NULL;
}
ImageDib::~ImageDib()
{
if(m_lpDib!=NULL)
delete [] m_lpDib;
if(m_hPalette!=NULL)
::Deleteobject(m_hPalette);
}
BOOL ImageDib::Read(LPCTSTR lpszPathName)
{
CFile file;
if(!file.Open(lpszPathNameCFile::modeRead | CFile::shareDenyWrite))
return FALSE;
BITMAPFILEHEADER bmfh;
int nCount=file.Read((LPVOID)&bmfhsizeof(BITMAPFILEHEADER));
if(m_lpDib!=NULL) delete []m_lpDib;
m_lpDib=new BYTE[file.GetLength()-sizeof(BITMAPFILEHEADER)];
file.Read(m_lpDibfile.GetLength()-sizeof(BITMAPFILEHEADER));
m_lpBmpInfoHead=(LPBITMAPINFOHEADER)m_lpDib;
m_imgWidth=m_lpBmpInfoHead->biWidth;
m_imgHeight=m_lpBmpInfoHead->biHeight;
m_nBitCount=m_lpBmpInfoHead->biBitCount;
m_nColorTableLength=ComputeColorTabalLength(m_lpBmpInfoHead->biBitCount);
m_hPalette=NULL;
if(m_nColorTableLength!=0)
{
m_lpColorTable=(LPRGBQUAD)(m_lpDib+sizeof(BITMAPINFOHEADER));
MakePalette();
}
m_pImgData=(LPBYTE)m_lpDib+sizeof(BITMAPINFOHEADER)+
sizeof(RGBQUAD)*m_nColorTableLength;
return TRUE;
}
BOOL ImageDib::Write(LPCTSTR lpszPathName)
{
CFile file;
if(!file.Open(lpszPathNameCFile::modeCreate | CFile::modeReadWrite
| CFile::shareExclusive))
return FALSE;
BITMAPFILEHEADER bmfh;
bmfh.bfType=0x4d42;
bmfh.bfSize=0;
bmfh.bfReserved1=bmfh.bfReserved2=0;
bmfh.bfOffBits=sizeof(BITMAPFILEHEADER)+sizeof(BITMAPINFOHEADER)+
sizeof(RGBQUAD)*m_nColorTableLength;
try
{
file.Write((LPVOID)&bmfhsizeof(BITMAPFILEHEADER));
file.Write(m_lpBmpInfoHeadsizeof(BITMAPINFOHEADER));
if(m_nColorTableLength!=0)
file.Write(m_lpColorTablesizeof(RGBQUAD)*m_nColorTableLength);
int imgBufSize=(m_imgWidth*m_nBitCount/8+3)/4*4*m_imgHeight;
file.Write(m_pImgDataimgBufSize);
}
catch(CException* pe)
{
pe->Delete();
AfxMessageBox(“write error“);
return FALSE;
}
return TRUE;
}
void ImageDib::MakePalette()
{
if(m_nColorTableLength==0)
return;
if(m_hPalette!=NULL)
::Deleteobject(m_hPalette);
LPLOGPALETTE pLogPal=(LPLOGPALETTE)new char[2*sizeof(WORD)+
m_nColorTableLength*sizeof(PALETTEENTRY)];
pLogPal->palVersion=0x300;
pLogPal->palNumEntries=m_nColorTableLength;
LPRGBQUAD m_lpDibQuad=(LPRGBQUAD)m_lpColorTable;
for(int i=0;i {
pLogPal->palPalEntry[i].peRed=m_lpDibQuad->rgbRed;
pLogPal->palPalEntry[i].peGreen=m_lpDibQuad->rgbGreen;
pLogPal-
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 15684 2014-09-28 12:07 SingleDocView\Debug\ImageDib.obj
文件 20028 2014-09-27 23:11 SingleDocView\Debug\MainFrm.obj
文件 122955 2014-09-28 12:07 SingleDocView\Debug\SingleDocView.exe
文件 328220 2014-09-28 12:07 SingleDocView\Debug\SingleDocView.ilk
文件 23666 2014-09-27 23:11 SingleDocView\Debug\SingleDocView.obj
文件 5493672 2014-09-27 23:11 SingleDocView\Debug\SingleDocView.pch
文件 345088 2014-09-28 12:07 SingleDocView\Debug\SingleDocView.pdb
文件 7452 2014-09-27 23:11 SingleDocView\Debug\SingleDocView.res
文件 18481 2014-09-28 12:07 SingleDocView\Debug\SingleDocViewDoc.obj
文件 19990 2014-09-28 12:07 SingleDocView\Debug\SingleDocViewView.obj
文件 105774 2014-09-27 23:11 SingleDocView\Debug\StdAfx.obj
文件 214016 2014-09-28 12:07 SingleDocView\Debug\vc60.idb
文件 364544 2014-09-28 12:07 SingleDocView\Debug\vc60.pdb
文件 5596 2014-09-28 12:02 SingleDocView\ImageDib.cpp
文件 1743 2014-09-28 11:57 SingleDocView\ImageDib.h
文件 2514 2014-09-27 23:11 SingleDocView\MainFrm.cpp
文件 1581 2014-09-27 23:11 SingleDocView\MainFrm.h
文件 4776 2014-09-27 23:11 SingleDocView\ReadMe.txt
文件 1078 2014-09-27 23:11 SingleDocView\res\SingleDocView.ico
文件 405 2014-09-27 23:11 SingleDocView\res\SingleDocView.rc2
文件 1078 2014-09-27 23:11 SingleDocView\res\SingleDocViewDoc.ico
文件 1078 2014-09-27 23:11 SingleDocView\res\Toolbar.bmp
文件 501 2014-09-27 23:11 SingleDocView\Resource.h
文件 28820 2014-09-28 08:13 SingleDocView\SingleDocView.aps
文件 2395 2014-09-28 12:02 SingleDocView\SingleDocView.clw
文件 4481 2014-09-27 23:11 SingleDocView\SingleDocView.cpp
文件 4897 2014-09-28 11:57 SingleDocView\SingleDocView.dsp
文件 551 2014-09-27 23:11 SingleDocView\SingleDocView.dsw
文件 1433 2014-09-27 23:11 SingleDocView\SingleDocView.h
文件 91136 2014-09-28 12:19 SingleDocView\SingleDocView.ncb
............此处省略16个文件信息
相关资源
- VC++ 多线程文件读写操作
- 移木块游戏,可以自编自玩,vc6.0编写
- VC++MFC小游戏实例教程(实例)+MFC类库
- VC++实现CMD命令执行与获得返回信息
- 二维码生成BMP
- VC++基于OpenGL模拟的一个3维空间模型
- 基于VC++的SolidWorks二次开发SolidWorks
- 派克变换VC++源码(附文档)
- VC++ 串口
- VC++ 大富翁4_大富翁游戏源码
- VC++ 摄像头视频采集与回放源程序
- 转 VC++ 实现电子邮件(Email)发送
- 基于MFC的VC++仿QQ浏览器源码(雏形)
- VC++ 服务程序编写及安装与卸载
- VC++6.0番茄西红柿VAXvirsual assist X完美破
- 基于改进的fcm算法的图像分割vc++
- VC++6.0 绿色版,免安装,非常好用。
- Microsoft Visual C++ 2005 Redistributable Pack
- VC++MFC课程设计的学生成绩管理系统
- 大智慧365DLL插件设计
- VC++6.0汉化包
- VC++完整商业界面源码(再上传)
- VC++编程技术600个大型项目源码.rar
- VC++实现RSA加密算法
- VC++ 中国象棋经典游戏源代码
- 郁金香VC++游戏辅助视频教程
- C语言进阶源码---基于graphics实现图书
- 摄影测量相对定向VC++程序
- Bmp图像处理.zip
- VC++数字图像处理典型算法及实现
评论
共有 条评论