资源简介

MatLab程序。 C++实现。 实现对二值图像进行腐蚀、膨胀、开/闭运算。 腐蚀分水平、垂直、全方位。 膨胀分水平、垂直、全方位。 能保存处理后的图,以及将处理后的图与原图进行对比。

资源截图

代码片段和文件信息

#include “stdafx.h“
#include “cdib.h“
#include “windowsx.h“
#include “math.h“
#define WIDTHBYTES(bits)    (((bits) + 31) / 32 * 4) 

CDib::CDib()
{
size=0;
}

CDib::~CDib()
{
    GlobalFreePtr(m_pBitmapInfo);
}

void CDib::LoadFile(const char* dibFileName)
{
   strcpy(m_fileNamedibFileName);
    CFile dibFile(m_fileName CFile::modeRead);
    dibFile.Read((void*)&bitmapFileHeadersizeof(BITMAPFILEHEADER));
    if (bitmapFileHeader.bfType == 0x4d42)
    {
        DWORD fileLength = dibFile.GetLength();    
         size = fileLength -sizeof(BITMAPFILEHEADER);
         pDib =(BYTE*)GlobalAllocPtr(GMEM_MOVEABLE size);
        dibFile.Read((void*)pDib size);
        dibFile.Close();
        m_pBitmapInfo = (BITMAPINFO*) pDib;
        m_pBitmapInfoHeader = (BITMAPINFOHEADER*) pDib;
        m_pRGB = (RGBQUAD*)(pDib +
m_pBitmapInfoHeader->biSize);
        int m_numberOfColors = GetNumberOfColors();
        if (m_pBitmapInfoHeader->biClrUsed == 0)
            m_pBitmapInfoHeader->biClrUsed =
    m_numberOfColors;
        DWORD colorTableSize = m_numberOfColors *
            sizeof(RGBQUAD);
        m_pData = pDib + m_pBitmapInfoHeader->biSize
            + colorTableSize;
if (m_pRGB == (RGBQUAD*)m_pData) // No color table
m_pRGB = NULL;
        m_pBitmapInfoHeader->biSizeImage = GetSize();
m_valid = TRUE;
    }    
    else
    {
        m_valid = FALSE;
        AfxMessageBox(“This isn‘t a bitmap file!“);
    }
}

BOOL CDib::IsValid()
{
    return m_valid;
}
        
char* CDib::GetFileName()
{
    return m_fileName;
}
        
UINT CDib::GetWidth()
{
    return (UINT) m_pBitmapInfoHeader->biWidth;
}
        
UINT CDib::GetHeight()
{
    return (UINT) m_pBitmapInfoHeader->biHeight;
}
        
DWORD CDib::GetSize()
{
    if (m_pBitmapInfoHeader->biSizeImage != 0)
        return m_pBitmapInfoHeader->biSizeImage;
else
    {
        DWORD height = (DWORD) GetHeight();
        DWORD width = (DWORD) GetWidth();
        return height * width;
    }
}

UINT CDib::GetNumberOfColors()
{
int numberOfColors;

    if ((m_pBitmapInfoHeader->biClrUsed == 0) &&
          (m_pBitmapInfoHeader->biBitCount < 9))
{
switch (m_pBitmapInfoHeader->biBitCount)
{
    case 1: numberOfColors = 2; break;
    case 4: numberOfColors = 16; break;
    case 8: numberOfColors = 256;
}
}
    else
numberOfColors = (int) m_pBitmapInfoHeader->biClrUsed;

    return numberOfColors;
}
DWORD CDib::GetDibWidthBytes()
{  
byBitCount=m_pBitmapInfoHeader->biBitCount;
LONG nWidth=m_pBitmapInfoHeader->biWidth;

dwWidthBytes = (DWORD)m_pBitmapInfoHeader->biWidth; //8-bits
if(byBitCount == 1) dwWidthBytes = (nWidth + 7) / 8;
else if(byBitCount == 4) dwWidthBytes = (nWidth + 1) / 2;
else if(byBitCount == 24) dwWidthBytes = 3 * nWidth ;

while((dwWidthBytes & 3) != 0)dwWidthBytes++;

return dwWidthBytes;

}  
    
BYTE* CDib::GetData()
{
    r

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2012-06-24 21:14  MatLab程序\
     文件      300162  2004-07-29 20:33  MatLab程序\24位腐蚀原图.bmp
     文件        3890  2004-04-01 17:30  MatLab程序\Cdib.cpp
     文件         853  2004-04-01 17:30  MatLab程序\Cdib.h
     文件       47704  2004-09-20 17:03  MatLab程序\DSplit.aps
     文件        3620  2004-09-20 17:03  MatLab程序\DSPLIT.CLW
     文件        4158  2003-04-01 08:51  MatLab程序\Dsplit.cpp
     文件        5174  2004-04-01 22:50  MatLab程序\DSplit.dsp
     文件         579  1999-01-28 11:36  MatLab程序\DSPLIT.DSW
     文件        1366  2003-04-01 08:51  MatLab程序\Dsplit.h
     文件      959488  2004-09-20 17:03  MatLab程序\DSPLIT.NCB
     文件       82944  2004-09-20 17:03  MatLab程序\DSPLIT.OPT
     文件        2964  2004-09-06 11:56  MatLab程序\DSPLIT.PLG
     文件       13252  2004-09-20 17:03  MatLab程序\DSplit.rc
     文件    58675200  2012-06-24 21:14  MatLab程序\DSplit.sdf
     文件        8409  2012-06-24 21:11  MatLab程序\DSplit.vcxproj
     文件        3375  2012-06-24 21:11  MatLab程序\DSplit.vcxproj.filters
     文件         143  2012-06-24 21:11  MatLab程序\DSplit.vcxproj.user
     文件        2008  2003-04-01 08:45  MatLab程序\DSplitDoc.cpp
     文件        1509  2003-04-03 17:12  MatLab程序\DSplitDoc.h
     文件        3238  2003-04-02 16:45  MatLab程序\Dsplitview.cpp
     文件        1859  2003-04-01 08:27  MatLab程序\Dsplitview.h
     文件        6439  2003-04-02 10:18  MatLab程序\DYNSPLITTERWND.CPP
     文件        1733  1998-03-10 17:19  MatLab程序\DYNSPLITTERWND.H
     文件        6587  2004-07-29 20:31  MatLab程序\DynSplitView2.cpp
     文件        2136  2003-05-29 07:36  MatLab程序\DynSplitView2.h
     文件       18279  2004-09-13 20:39  MatLab程序\FuShiYuPengZhangDib.cpp
     文件         397  2003-04-27 11:19  MatLab程序\FuShiYuPengZhangDib.h
     文件        3550  2003-04-03 17:15  MatLab程序\MAINFRM.CPP
     文件        1691  2003-04-02 17:00  MatLab程序\MAINFRM.H
     文件        4035  1998-02-03 10:42  MatLab程序\README.TXT
............此处省略8个文件信息

评论

共有 条评论