资源简介
演示了DIB文件的读入、保存和显示,剔除一些特殊情况的考虑,主要关注整个DIB的操作流程,对DIB操作入门和提高均有帮助。
代码片段和文件信息
#include
#include “DibOperate.h“
static OPENFILENAME ofn;
void DibFileDlgInit(HWND hwnd)
{
static TCHAR szFilter[] = TEXT(“Bitmap Files(*.BMP)\0*.bmp\0“)
TEXT(“All Files(*.*)\0*.*\0\0“);
ofn.lStructSize = sizeof(OPENFILENAME); //结构体大小
ofn.hwndOwner = hwnd; //父窗口句柄
ofn.hInstance = NULL;
ofn.lpstrFilter = szFilter; //文件后缀名过滤选项
ofn.lpstrCustomFilter = NULL;
ofn.nMaxCustFilter = 0;
ofn.nFilterIndex = 0;
ofn.lpstrFile = NULL; //打开文件全路径保存位置
ofn.nMaxFile = MAX_PATH; //打开文件全路径长度
ofn.lpstrFiletitle = NULL; //打开文件名保存位置
ofn.nMaxFiletitle = MAX_PATH; //打开文件名长度
ofn.lpstrInitialDir = TEXT(“.\\“); //打开的初始文件夹
ofn.lpstrtitle = NULL; //打开的文件对话框标题
ofn.Flags = 0;
ofn.nFileOffset = 0;
ofn.nFileExtension = 0;
ofn.lpstrDefExt = TEXT(“bmp“); //默认的文件后缀
ofn.lCustData = 0;
ofn.lpfnHook = NULL;
ofn.lpTemplateName = NULL;
}
BOOL DibGetOpenFile(HWND hwnd PTSTR pstrFileName PTSTR pstrtitleName)
{
ofn.hwndOwner = hwnd;
ofn.lpstrFile = pstrFileName;
ofn.lpstrFiletitle = pstrtitleName;
ofn.Flags = 0;
return GetOpenFileName(&ofn);
}
BOOL DibGetSaveFile(HWND hwnd PTSTR pstrFileName PTSTR pstrtitleName)
{
ofn.hwndOwner = hwnd;
ofn.lpstrFile = pstrFileName;
ofn.lpstrFiletitle = pstrtitleName;
ofn.Flags = OFN_OVERWRITEPROMPT;
return GetSaveFileName(&ofn);
}
BOOL DibTotalLoad(PTSTR szBmpFile
PBITMAPFILEHEADER *ppbmfh
PBITMAPINFO *ppbmi
PBYTE *ppBits
PLONG pBmpWidth
PLONG pBmpHeight)
{
HANDLE hFile;
DWORD dwFileSize dwBytesRead;
BOOL bSuccess;
//打开文件
hFile = CreateFile( szBmpFile
GENERIC_READ FILE_SHARE_READ NULL
OPEN_EXISTING FILE_FLAG_SEQUENTIAL_SCAN NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
return FALSE;
}
//判断BMP文件大小(所有部分)
dwFileSize = GetFileSize(hFile NULL);
//分配对应大小内存用于保存磁盘BMP文件内容
*ppbmfh = malloc(dwFileSize);
if (!(*ppbmfh))
{
CloseHandle(hFile);
return FALSE;
}
//读入文件内容
bSuccess = ReadFile(hFile *ppbmfh dwFileSize &dwBytesRead NULL);
CloseHandle(hFile);
//校验读入是否正确和文件是否为BMP文件
if (!bSuccess ||
(dwBytesRead != dwFileSize) ||
(*ppbmfh)->bfType != *(WORD *)“BM“)
{
free(*ppbmfh);
return FALSE;
}
//计算剩余的返回参数
*ppbmi = (PBITMAPINFO)(*ppbmfh+1);
*ppBits = (PBYTE)(*ppbmfh) + (*ppbmfh)->bfOffBits;
*pBmpWidth = (*ppbmi)->bmiHeader.biWidth;
*pBmpHeight = (*ppbmi)->bmiHeader.biHeight;
return TRUE;
}
BOOL DibTotalSave(PTSTR szBmpFile PBITMAPFILEHEADER pbmfh)
{
BOOL bSuccess;
DWORD dwBytesWrite;
HANDLE hFile;
//打开要写入的文件
hFile = CreateFile(szBmpFile
GENERIC_WRITE 0 NULL
CREATE_ALWAYS FILE_ATTRIBUTE_NORMAL NULL);
if (INVALID_HANDLE_VALUE == hFile)
{
return FALSE;
}
//写入文件
bSuccess = WriteFile(hFile pbmfh pbmfh->bfSize &dwBytesWrite NULL);
CloseHandle(hFile);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-05-19 16:53 DIB的读入、保存和显示\
目录 0 2014-05-19 16:53 DIB的读入、保存和显示\DIB\
文件 579534 2014-05-19 15:24 DIB的读入、保存和显示\DIB\1.bmp
文件 415854 2014-05-19 15:25 DIB的读入、保存和显示\DIB\2.bmp
文件 2080 2014-05-19 15:56 DIB的读入、保存和显示\DIB\DIB.rc
文件 4154 2014-05-19 15:57 DIB的读入、保存和显示\DIB\DIB.vcproj
文件 1417 2014-05-19 16:53 DIB的读入、保存和显示\DIB\DIB.vcproj.wenzhou-PC.wenzhou.user
文件 7835 2014-05-19 16:52 DIB的读入、保存和显示\DIB\DibOperate.c
文件 902 2014-05-19 16:06 DIB的读入、保存和显示\DIB\DibOperate.h
文件 5885 2014-05-19 16:43 DIB的读入、保存和显示\DIB\Main.c
文件 1010 2014-05-19 15:56 DIB的读入、保存和显示\DIB\resource.h
文件 875 2014-05-19 13:33 DIB的读入、保存和显示\DIB的读入、保存和显示.sln
- 上一篇:MIL图像新建和显示演示代码
- 下一篇:Abaqus电路板跌落测试模拟
评论
共有 条评论