C++图像处理几何校正可运行工程


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  几何校正ack.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个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)