///////////////////////////////////////
// ReadBMP.cpp
#include <afxdlgs.h>
#include "resource.h"
#include "ReadBMP.h"
CMyApp theApp;
BOOL CMyApp::InitInstance()
{
m_pMainWnd = new CMainWindow;
m_pMainWnd->ShowWindow(m_nCmdShow);
return TRUE;
}
CMainWindow::CMainWindow()
{
LPCTSTR lpszClassName = AfxRegisterWndClass(CS_HREDRAW|CS_VREDRAW,
::LoadCursor(NULL, IDC_ARROW), (HBRUSH)(COLOR_WINDOW+1), theApp.LoadIcon(IDI_MAIN));
CreateEx(NULL, lpszClassName, "BMP文件浏览器",
WS_OVERLAPPED | WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX,
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL);
}
BEGIN_MESSAGE_MAP(CMainWindow, CWnd)
ON_WM_CREATE()
ON_WM_PAINT()
ON_COMMAND(FILE_OPEN, OnFileOpen) // 文件菜单项下的子项“打开”的ID号为FILE_OPEN
END_MESSAGE_MAP()
void CMainWindow::PostNcDestroy()
{
delete this;
}
BOOL CMainWindow::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
::SetMenu(m_hWnd, ::LoadMenu(theApp.m_hInstance, (LPCTSTR)IDR_MAIN));
CClientDC dc(this);
// 初始化内存DC
m_hMemDC = ::CreateCompatibleDC(dc);
m_nHeight = 0;
m_nWidth = 0;
return TRUE;
}
void CMainWindow::OnPaint()
{
CPaintDC dc(this);
::BitBlt(dc, 0, 0,
m_nWidth, m_nHeight, m_hMemDC, 0, 0, SRCCOPY);
/* CPaintDC dcClient(this); // 客户区 DC (目标 DC)
CWindowDC dcWindow(this); // 整个窗口 DC (源 DC)
// 将窗口左上角30×30大小的图像拷贝到客户区
::BitBlt(
dcClient, // hdcDst 目标 DC
10, // xDst 指定目标 DC 中接受图像的起始位置(xDst, yDst)
10, // yDst
30, // cx 欲传输图象的宽度(cx)和高度(cy)
30, // cy
dcWindow, // hdcSrc 源 DC
0, // xSrc 指定源 DC 中要拷贝的图像的起始坐标(xSrc,ySrc)
0, // ySrc
SRCCOPY); // dwROP 传输过程要执行的光栅运算
*/
}
void CMainWindow::OnDestroy()
{
::DeleteDC(m_hMemDC);
}
void CMainWindow::OnFileOpen() // 用户点击打开菜单命令时
{
CFileDialog file(TRUE);
if(!file.DoModal())
return;
// 下面是映射BMP文件到内存的过程
// 打开要映射的文件
HANDLE hFile = ::CreateFile(file.GetFileName(), GENERIC_READ,
FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
MessageBox("读取文件出错!");
return;
}
// 创建内存映射对象
HANDLE hMap = ::CreateFileMapping(hFile, NULL, PAGE_READONLY, NULL, NULL, NULL);
// 映射整个BMP文件到内存,返回这块内存的首地址
LPVOID lpBase = ::MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
// 下面是获取BMP文件信息的过程
BITMAPFILEHEADER *pFileHeader; // bitmap file-header
BITMAPINFO *pInfoHeader; // bitmap info-header
// 取得file-header指针,以获得位图象素
pFileHeader = (BITMAPFILEHEADER*)lpBase;
if(pFileHeader->bfType != MAKEWORD('B', 'M'))
{
MessageBox("本程序仅读取BMP文件!");
::UnmapViewOfFile(lpBase);
::CloseHandle(hMap);
::CloseHandle(hFile);
return;
}
BYTE *pBits = (BYTE*)lpBase + pFileHeader->bfOffBits;
// 取得info-header指针,以获得文件的大小
pInfoHeader = (BITMAPINFO*)((BYTE*)lpBase + sizeof(BITMAPFILEHEADER));
m_nHeight = pInfoHeader->bmiHeader.biHeight;
m_nWidth = pInfoHeader->bmiHeader.biWidth;
// 下面是显示BMP文件到内存设备的过程
CClientDC dc(this);
// 创建一个与指定DC兼容的未初始化的位图,选入到内存兼容DC中
HBITMAP hBitmap = ::CreateCompatibleBitmap(dc, m_nWidth, m_nHeight);
::SelectObject(m_hMemDC, hBitmap);
// 把象图像据放到建立的设备中
int nRet = ::SetDIBitsToDevice(m_hMemDC,
0, // xDest
0, // yDest
m_nWidth,
m_nHeight,
0, // xSrc
0, // ySrc
0, // uStartScan 开始复制的扫描线和要复制的扫描线数
m_nHeight, // cScanLines
pBits, // lpvBits 指向DIB中的象素数据部分
pInfoHeader, // lpbmi 指向BITMAPINFO结构
DIB_RGB_COLORS); // fuColorUse 指定了DIB中数据的类型
::InvalidateRect(m_hWnd, NULL, TRUE);
::DeleteObject(hBitmap);
::UnmapViewOfFile(lpBase);
::CloseHandle(hMap);
::CloseHandle(hFile);
}
没有合适的资源?快使用搜索试试~ 我知道了~
打开BMP文件的所有源程序
共11个文件
h:2个
opt:1个
ncb:1个
5星 · 超过95%的资源 需积分: 24 45 下载量 116 浏览量
2012-03-24
15:53:59
上传
评论 3
收藏 52KB RAR 举报
温馨提示
[disp bmp.rar] - c语言写的bmp图像读取显示例程,有助于具体了解bmp文件格式,灵活操作 [readbmp.rar] - 在visual c++下读取*.bmp位图的信息,并显示位图,点击“查看”->“信息”菜单,弹出对话框中显示色彩位数、图像高度宽度、文件头大小等等信息。 [load_bmp_WINSDK.rar] - 载入位图的源代码,使用的是bmp格式。可直接编译通过。 [图片文件格式文档.zip] - 图片文件格式说明,包含多种图片文件格式,例如:bmp,JPG,GIF,WMF,TI [CDialogSK_demo.zip] - 本系统实现了对话框界面随着资源res文件夹里面的bmp位图文件来改变,并且可以随意移动对话框的位置,还包含如果背景色是绿色可以透明显示! [bmp.rar] - 打开bmp文件源代码,VC实现,相当好用,用于毕业设计及课程设计 [bmp位图文件程序.rar] - 手把手教你了解bmp图形文件结构,C语言文件读写函数应用,一般数据处理方法,如果看不懂,说明我写的还不够具体,以后继续改进. [bmp2jpeg&jpegcoding;.rar] - bmp转换为jpeg,jpeg压缩的源代码 程序用vc实现了bmp图片转换成jpeg图片 [bmpfor3.rar] - 从文件读取并显示bmp位图,然后保存 [运用Opengl和C实现一个人体面部的三维显示.rar] - 通过VC++和OPenGL实现人脸的三维显示,在 vc++6.0下编译通过
资源推荐
资源详情
资源评论
收起资源包目录
Read BMP.rar (11个子文件)
Read BMP
resource.h 548B
08ReadBMP.dsw 541B
08ReadBMP.opt 48KB
08ReadBMP.exe 96KB
Release
Tree4.ico 2KB
08ReadBMP.ncb 49KB
08ReadBMP.dsp 4KB
ReadBMP.cpp 4KB
08ReadBMP.plg 652B
ReadBMP.h 557B
ReadBMP.rc 2KB
共 11 条
- 1
资源评论
- yangchunmiao20092013-03-19看起来没有错误 但是我运行不出来 可能是版本的问题 还得稍作修改
- wangwei00120022013-03-16对学习有好处的,仔细研究研究
- ss88121382012-07-18资源很好 介绍了多种方式打开BMP图像
- 雨_水2013-11-30很好的代码,实现了打开bmp的功能,谢谢分享!
- f89153452012-11-18资源挺全,谢谢分享
wzz556655
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功