资源简介
C++图像处理几何校正,可直接运行的工程,很好用的,
代码片段和文件信息
#include “stdafx.h“
#include “dib.h“
IMPLEMENT_DYNAMIC(CDib Cobject)
CDib::CDib()
{
Init();
}
CDib::CDib(const char* pszDibFileName)
{
Init();
LoadFile(pszDibFileName);
}
CDib::~CDib()
{
ClearMemory();
}
void CDib::ClearMemory()
{
if(m_hDIB != NULL)
::GlobalFree(m_hDIB);
m_hDIB = 0;
m_pDibData = NULL;
m_pszFileName = NULL;
m_pBitmapInfoHeader = NULL;
m_pBitmapInfo = NULL;
m_pRGBQuad = NULL;
m_pBitmapFileHeader = NULL;
}
#ifdef _DEBUG
void CDib::Dump(CDumpContext& dc) const
{
Cobject::Dump(dc);
}
void CDib::AssertValid() const
{
Cobject::AssertValid();
ASSERT(m_pszFileName != NULL);
ASSERT(m_hDIB != 0);
}
#endif
void CDib::Init()
{
m_pRGBQuad = NULL; //RGBQUAD 表项
m_pDibData = NULL; //位图像素数据
m_nWidth = 0; //宽度
m_nHeight = 0; //高度
m_nBitCount = 0; //每个像素占有的位数
m_nTotalColors = 0; //颜色总数
m_pBitmapFileHeader = NULL;
m_pBitmapInfoHeader = NULL;
m_pBitmapInfo = NULL;
m_hDIB = 0;
m_pszFileName = NULL;
}
void CDib::LoadFile(const char* pszDibFileName)
{
ASSERT(pszDibFileName);
//如果存在就释放内存
if(m_pBitmapInfo) ::GlobalFree(m_hDIB);
//再次初始化 用于多次动态重用
Init();
m_pszFileName = (char*)pszDibFileName;
BITMAPFILEHEADER bitmapFileHeader;
CFile dibFile(pszDibFileName CFile::modeRead);
try
{
//读入位图文件头信息
UINT nBFHsize = dibFile.Read((void*)&bitmapFileHeader sizeof(BITMAPFILEHEADER));
if(nBFHsize != sizeof(BITMAPFILEHEADER))
{
m_bValid = FALSE;
return;
}
}
catch(CFileException* e)
{
e->Delete();
}
//如果为位图就进行下一步的处理
if (bitmapFileHeader.bfType == 0x4d42)
{
AfxGetApp()->BeginWaitCursor();
//文件长度
DWORD dwFileLength = dibFile.GetLength();
//位图信息及位图数据的大小(字节)
DWORD dwSize = dwFileLength - sizeof(BITMAPFILEHEADER);
//为Dib分配全局内存
m_hDIB = (HGLOBAL) ::GlobalAlloc(GMEM_MOVEABLE dwSize);
if (m_hDIB == 0) m_bValid = FALSE;
//指向Dib实际像素数据的指针
BYTE* pbyDib = (BYTE*)::GlobalLock(m_hDIB);
if (pbyDib == NULL) m_bValid = FALSE;
try
{
//读入内存
DWORD dwReadSize = dibFile.Read((void*)pbyDib dwSize);
dibFile.Close();
if(dwReadSize != dwSize)
{
m_bValid = FALSE;
::GlobalUnlock(m_hDIB);
::GlobalFree(m_hDIB);
Init();
return;
}
}
catch(CFileException* e)
{
e->Delete();
}
//获取位图文件头指针和位图文件数据信息指针
m_pBitmapInfo = (BITMAPINFO*) pbyDib;
m_pBitmapInfoHeader = (BITMAPINFOHEADER*) pbyDib;
//宽度和高度
m_nWidth = m_pBitmapInfoHeader->biWidth;
m_nHeight = m_pBitmapInfoHeader->biHeight;
//每像素的颜色位数
m_nBitCount = (BYTE)m_pBitmapInfoHeader->biBitCount;
//颜色数
m_nTotalColors = GetColorNumber();
if (m_pBitmapInfoHeader->biClrUsed == 0)
m_pBitmapInfoHeader->biClrUsed = m_nTotalColors;
//指向位图颜色索引表项的指针 如果没有颜色表项 则该值为NULL
m_pRGBQuad = (RGBQUAD*)(pbyDib + m_pBitmapInfoHeader->biSize);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 284726 2000-05-31 19:45 几何校正\back.bmp
文件 15539 2006-06-20 21:17 几何校正\Dib.cpp
文件 1472 2006-06-20 21:19 几何校正\Dib.h
文件 2875 2006-06-20 21:17 几何校正\ImageGeneralTransform.cpp
文件 702 2006-06-20 21:20 几何校正\ImageGeneralTransform.h
文件 19822 2006-06-20 21:19 几何校正\ImageGeometry.cpp
文件 1771 2006-06-20 21:20 几何校正\ImageGeometry.h
文件 2882 2006-06-20 21:19 几何校正\ImageProcess.cpp
文件 929 2006-06-20 21:20 几何校正\ImageProcess.h
文件 1732 2006-06-20 21:19 几何校正\ImageWarp.cpp
文件 803 2006-06-20 21:20 几何校正\ImageWarp.h
文件 1297 2000-06-21 21:47 几何校正\ImageWarpDialog.cpp
文件 1357 2000-06-21 21:47 几何校正\ImageWarpDialog.h
文件 8616 2006-06-20 21:20 几何校正\Img.h
文件 26916 2006-06-20 21:17 几何校正\ImgWarp.aps
文件 2459 2006-06-20 21:19 几何校正\ImgWarp.clw
文件 4132 2000-06-20 08:50 几何校正\ImgWarp.cpp
文件 5381 2000-06-20 22:33 几何校正\ImgWarp.dsp
文件 537 2000-06-20 08:50 几何校正\ImgWarp.dsw
文件 1367 2000-06-20 08:50 几何校正\ImgWarp.h
文件 287744 2006-06-20 21:20 几何校正\ImgWarp.ncb
文件 56832 2006-06-20 21:20 几何校正\ImgWarp.opt
文件 1680 2006-06-20 21:20 几何校正\ImgWarp.plg
文件 10291 2006-06-13 22:57 几何校正\ImgWarp.rc
文件 2347 2000-06-20 09:07 几何校正\ImgWarpDoc.cpp
文件 1438 2000-06-20 09:00 几何校正\ImgWarpDoc.h
文件 6339 2000-09-03 10:38 几何校正\ImgWarpView.cpp
文件 1986 2006-06-09 17:38 几何校正\ImgWarpView.h
文件 182094 2000-05-31 21:10 几何校正\ixon.bmp
文件 1892 2000-06-20 08:59 几何校正\MainFrm.cpp
............此处省略28个文件信息
- 上一篇:一个C++封装的网络库
- 下一篇:C++ 遍历磁盘文件
评论
共有 条评论