资源简介
用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++局域网聊天室完整版
- 大鱼吃小鱼游戏VC++源码
- 太空入侵者游戏源代码VC++
- 小型网络游戏vc++——网络五子棋
- VC++雷达模拟程序
- 用VC++编写的利用MITK读取五种图片格式
- VC++ socket 聊天室客户端
- VC++帮助文档
- 在内存中将bmp转JPG
- VC++6.0对txt文件的增删改查操作
- VC++面向对象与可视化程序设计第三版
- 基于MFC的流程图绘制工具
- DevC++ 4.9
- 手写数字识别_附带VC++源程序和训练素
- vc++ 数字图像处理典型算法及实现 源
- vc++使用大漠使用和dll头文件等.rar
- 在vs中仿真uc/gui的例程,摆脱vc++
- 机载激光雷达 Las格式读写及显示
- VC++定义一只红色画笔,绘制一个等边
- VC++编写的简单邮件客户端
- 仓库管理系统(SQL+VC++6.0)
- 组态软件设计与开发源代码.rar
- VC++实现的计算器,用MFC实现界面操作
- VC++2010 Express计算机二级考试所用编译
- Skin++3.0+For+VC++完全破解版
- 计算机图形学 清华大学教材 及 vc++
- vc++三维点云数据的读取与显示
- VC++6.0 MFC的学生信息管理系统
- VC++ ftp 服务器客户端毕业设计源码
- 网络入侵检查系统VC++
评论
共有 条评论