⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dib.cpp

📁 一个非常全的vc编程的原程序代码是关于图像处理的!
💻 CPP
📖 第 1 页 / 共 3 页
字号:
Is empty? 
parameter:   void
return:      BOOL
******************************************************/
HDIB CDib::GetHandle()
{
	return m_hDib;
}
/******************************************************
Get COLORREF of specified pixel 
parameter:   LONG(x), LONG(y)
return:      COLORREF
******************************************************/
COLORREF CDib::GetPixel(LONG x, LONG y)
{
	COLORREF cColor;
	switch(GetBitCount())
	{
	case 1:
		if(1<<(7-x%8)&*(BYTE*)(GetBitsPtr()+GetPixelOffset(x,y)))
			cColor=RGB(255,255,255);
		else 
			cColor=RGB(0,0,0);
		break;
	case 4:
		{
			PALETTEENTRY PaletteColors[16];
			m_pPalette->GetPaletteEntries(0,16,PaletteColors);
			int nIndex;
			nIndex=(*(BYTE*)(GetBitsPtr()+GetPixelOffset(x,y))&
				(x%2?0x0f:0xf0))>>(x%2?0:4);
			cColor=RGB(PaletteColors[nIndex].peRed,
						PaletteColors[nIndex].peGreen,
						PaletteColors[nIndex].peBlue);
		}
		break;
		
	case 8:
		{
			PALETTEENTRY PaletteColors[256];
			m_pPalette->GetPaletteEntries(0,256,PaletteColors);
			int nIndex;
			nIndex=*(BYTE*)(GetBitsPtr()+GetPixelOffset(x,y));
			cColor=RGB(PaletteColors[nIndex].peRed,
						PaletteColors[nIndex].peGreen,
						PaletteColors[nIndex].peBlue);
		}
		break;
		
	default:
		cColor=RGB(*(BYTE*)(GetBitsPtr()+GetPixelOffset(x,y)),
					*(BYTE*)(GetBitsPtr()+GetPixelOffset(x,y)+1),
					*(BYTE*)(GetBitsPtr()+GetPixelOffset(x,y)+2));
		break;
	}
	return cColor;
}
/******************************************************
Get the offset of specified pixel of DIB 
parameter:   LONG(x), LONG(y)
return:      LONG
******************************************************/
LONG CDib::GetPixelOffset(LONG x, LONG y)
{
	int BitCount = GetBitCount();
	return (GetHeight()-y-1)*GetWidthBytes()+x*BitCount/8;
}
/******************************************************
Get the Compression of DIB 
parameter:   void
return:      DWORD
******************************************************/
DWORD CDib::GetCompression()
{
	LPBITMAPINFOHEADER lpbi;
	lpbi = (LPBITMAPINFOHEADER)GlobalLock(m_hDib);
	DWORD comp;
	comp = lpbi->biCompression;
	GlobalUnlock(m_hDib);
	return comp;
}
/******************************************************
Get the BitCount of DIB 
parameter:   void
return:      WORD
******************************************************/
WORD CDib::GetBitCount()
{
	return DIBBitCount(m_hDib);
}
/******************************************************
Get the width of DIB 
parameter:   void
return:      LONG
******************************************************/
LONG CDib::GetWidth()
{
	return DIBWidth(m_hDib);
}
/******************************************************
Get the height of DIB 
parameter:   void
return:      LONG
******************************************************/
LONG CDib::GetHeight()
{
	return DIBHeight(m_hDib);
}
/******************************************************
Get the XPelsPerMeter of DIB 
parameter:   void
return:      long
******************************************************/
long CDib::GetXPelsPerMeter()
{
	return XPelsPerMeter(m_hDib);
}
/******************************************************
Get the XPelsPerMeter of DIB 
parameter:   void
return:      long
******************************************************/
long CDib::GetYPelsPerMeter()
{
	return YPelsPerMeter(m_hDib);
}
/******************************************************
Get the bytes per line of DIB 
parameter:   void
return:      LONG
******************************************************/
LONG CDib::GetWidthBytes()
{
	return BytesPerLine(m_hDib);
}
/******************************************************
Get the ColorsNumber of DIB 
parameter:   void
return:      WORD
******************************************************/
WORD CDib::GetColorNumber()
{
	return DIBNumColors(m_hDib);
}
/******************************************************
Get the size of palette of DIB 
parameter:   void
return:      WORD
******************************************************/
WORD CDib::GetPaletteSize()
{
	return PaletteSize(m_hDib);
}
/******************************************************
Get the Bitmap of DIB 
parameter:   void
return:      CBitmap*
******************************************************/
CBitmap* CDib::GetBitmap()
{
	return m_pBitmap;
}
/******************************************************
Get the Palette of DIB 
parameter:   void
return:      CPalette*
******************************************************/
CPalette* CDib::GetPalette()
{
	return m_pPalette;
}
/******************************************************
Get the offset of data block of DIB 
parameter:   void
return:      LPBYTE
******************************************************/
LPBYTE CDib::GetBitsPtr()
{
	LPBYTE lpbi;
	lpbi = (LPBYTE)GlobalLock(m_hDib);
	LPBYTE lpbits;
	lpbits = (LPBYTE)FindDIBBits(lpbi);
	GlobalUnlock(m_hDib);
	return lpbits;
}
/******************************************************
Convert DIB's format to specified one 
parameter:   WORD(BitCount)
return:      BOOL
******************************************************/
BOOL CDib::ConvertFormat(WORD wBitCount)
{
	if(IsEmpty())
		return FALSE;
	if(GetBitCount() == wBitCount)
		return TRUE;
	HDIB hNewDib = ConvertDIBFormat(m_hDib, wBitCount, NULL);
	if(!hNewDib)
		return FALSE;

	Destroy();
	m_hDib = hNewDib;
	return UpdateInternal();
}
/******************************************************
Display a DIB 
parameter:   CDC*, int(x), int(y), DWORD(SRCCOPY)
return:      BOOL
******************************************************/
BOOL CDib::Display(CDC * pDC, int x, int y, DWORD dwRop)
{
	CDC MemDC;
	MemDC.CreateCompatibleDC(pDC);

	CBitmap* pOldmap  = MemDC.SelectObject(m_pBitmap);
	CPalette* pOldPal = pDC->SelectPalette(m_pPalette, TRUE);
	pDC->RealizePalette();

	BOOL bSuccess = pDC->BitBlt(x, 
								y, 
								GetWidth(), 
								GetHeight(), 
								&MemDC,
								0,
								0,
								dwRop);
	MemDC.SelectObject(pOldmap);
	pDC->SelectPalette(pOldPal, TRUE);

	return bSuccess;
}
/******************************************************
Display a DIB 
parameter:   CDC,int(xDest), int(yDest),
             int(Width), int(Height),
             int(xSrc), int(ySrc),
			 DWORD(SRCCOPY);
return:      BOOL
******************************************************/
BOOL CDib::Display(CDC * pDC, int xdest, int ydest, int nwidthdest, int nheightdest,
				   int xscr, int yscr, DWORD dwRop)
{
	CDC MemDC;
	MemDC.CreateCompatibleDC(pDC);

	CBitmap*  pOldmap = MemDC.SelectObject(m_pBitmap);
	CPalette* pOldPal = pDC->SelectPalette(m_pPalette, TRUE);
	pDC->RealizePalette();
	
	BOOL bSuccess = pDC->BitBlt(xdest, 
								ydest, 
								nwidthdest, 
								nheightdest,
								&MemDC,
								xscr,
								yscr,
								dwRop);
	MemDC.SelectObject(pOldmap);
	pDC->SelectPalette(pOldPal, TRUE);

	return bSuccess;
}
/******************************************************
Display a DIB 
parameter:   CDC, int(xDest), int(yDest),
             int(WidthDest), int(HeightDest),
             int(xSrc), int(ySrc),
			 int(WidthSrc), int(HeightSrc),
			 DWORD(SRCCOPY)
return:      BOOL
******************************************************/
BOOL CDib::Display(CDC * pDC, int xdest, int ydest, int nwidthdest, int nheightdest,
				   int xscr, int yscr, int nwidthscr, int nheightscr, DWORD dwRop)
{
	CDC MemDC;
	MemDC.CreateCompatibleDC(pDC);

	CBitmap*  pOldmap = MemDC.SelectObject(m_pBitmap);
	CPalette* pOldPal = pDC->SelectPalette(m_pPalette,TRUE);
	pDC->RealizePalette();
		
	BOOL bSuccess = pDC->StretchBlt(xdest,
									ydest,
									nwidthdest,
									nheightdest,
									&MemDC,
									xscr,
									yscr,
									nwidthscr,
									nheightscr,
									dwRop);

	MemDC.SelectObject(pOldmap);
	pDC->SelectPalette(pOldPal, TRUE);

	return bSuccess;
}
/******************************************************
Display a DIB 
parameter:   CDC, CRect(Dest), CRect(Src),
             DWORD(SRCCOPY)
return:      BOOL
******************************************************/
BOOL CDib::Display(CDC* pDC, CRect rcDest, CRect rcScr, DWORD dwRop)
{
	CDC MemDC;
	MemDC.CreateCompatibleDC(pDC);

	CBitmap*  pOldmap = MemDC.SelectObject(m_pBitmap);
	CPalette* pOldPal = pDC->SelectPalette(m_pPalette, TRUE);
	pDC->RealizePalette();

	BOOL bSuccess = pDC->StretchBlt(rcDest.left,
									rcDest.top,
									rcDest.Width(),
									rcDest.Height(),
									&MemDC,
									rcScr.left,
									rcScr.top,
									rcScr.Width(),
									rcScr.Height(),
									dwRop);
	MemDC.SelectObject(pOldmap);
	pDC->SelectPalette(pOldPal, TRUE);

	return bSuccess;
}
/******************************************************
Display the palette 
parameter:   CDC, CRect
return:      BOOL
******************************************************/
BOOL CDib::DisplayPal(CDC * pDC,CRect rc)
{
	return DisplayPalette(pDC->GetSafeHdc(), (LPRECT)&rc, (HPALETTE)m_pPalette->GetSafeHandle());
}
/******************************************************
Do some preparing work before paint DIB 
parameter:   CDC*
return:      CDC
******************************************************/
CDC* CDib::BeginPaint(CDC* pDC)
{
	m_pMemDC = new CDC;
	m_pMemDC->CreateCompatibleDC(pDC);
	m_pPaletteTmp = m_pMemDC->SelectPalette(m_pPalette,TRUE);
	m_pMemDC->RealizePalette();
	m_pBitmapTmp = (CBitmap*)m_pMemDC->SelectObject(m_pBitmap);
	return m_pMemDC;
}
/******************************************************
Do some end work after paint DIB 
parameter:   void
return:      void
******************************************************/
void CDib::EndPaint()
{
	m_pMemDC->SelectObject(m_pBitmapTmp);
	m_pMemDC->SelectPalette(m_pPaletteTmp, TRUE);
	delete m_pMemDC;

	Create(m_hBitmap);
}
/*************************************************
Rotate current DIB 180 degree counter-clockwise.
parameter:   void
return:      BOOL
*************************************************/
BOOL CDib::Rotate180()
{
	HDIB h = RotateDIB(m_hDib);
	if(!h)
		return FALSE;
	HDIB hNewDib = RotateDIB(h);
	DestroyDIB(h);
	if(!hNewDib)
		return FALSE;

	Destroy();
	m_hDib = hNewDib;

	return UpdateInternal();
}
/*************************************************
Rotate current DIB 90 degree counter-clockwise.
parameter:   void
return:      BOOL
*************************************************/
BOOL CDib::Rotate90()
{
	HDIB hNewDib = RotateDIB(m_hDib);
	if(!hNewDib)
		return FALSE;
	Destroy();
	m_hDib = hNewDib;

	return UpdateInternal();
}
/*************************************************
Rotate current DIB 270 degree counter-clockwise.
parameter:   void
return:      BOOL
*************************************************/
BOOL CDib::Rotate270()
{
	HDIB h1 = RotateDIB(m_hDib);
	if(!h1)
		return FALSE;
	HDIB h2 = RotateDIB(h1);
	DestroyDIB(h1);

	if(!h2)
		return FALSE;
	HDIB hNewDib = RotateDIB(h2);
	DestroyDIB(h2);
	
	if(!hNewDib)
		return FALSE;
	Destroy();
	m_hDib = hNewDib;

	return UpdateInternal();
}
/*************************************************
Flip DIB horzonly.
parameter:   void
return:      BOOL
*************************************************/
BOOL CDib::FlipHorz()
{
	HDIB hNewDib = FlipHorzDIB(m_hDib);
	if(!hNewDib)
		return FALSE;
	Destroy();
	m_hDib = hNewDib;

	return UpdateInternal();
}
/*************************************************
Flip DIB vertically.
parameter:   void
return:      BOOL
*************************************************/
BOOL CDib::FlipVert()
{
	Rotate90();
	FlipHorz();
    Rotate270();
	return UpdateInternal();
}
/*************************************************
自身差值
parameter:   void
return:      BOOL
*************************************************/
BOOL CDib::SelfDiff()
{
	HDIB hNewDib = SelfDiffDIB(m_hDib);
	if(!hNewDib)
		return FALSE;
	Destroy();
	m_hDib = hNewDib;

	return UpdateInternal();
}
/*************************************************
反色
parameter:   void
return:      BOOL
*************************************************/
BOOL CDib::RevertColor()
{
	HDIB hNewDib = RevertColorDIB(m_hDib);
	if(!hNewDib)
		return FALSE;
	Destroy();
	m_hDib = hNewDib;

	return UpdateInternal();
}
/*************************************************
去色
parameter:   void
return:      BOOL
*************************************************/
BOOL CDib::ColorToGray()
{
	HDIB hNewDib = ColorDIBToGrayDIB(m_hDib);
	if(!hNewDib)
		return FALSE;
	Destroy();
	m_hDib = hNewDib;

	return UpdateInternal();
}
/**********************************************************
rotate the current DIB specified degree counter-clockwise 
parameter:   void
return:      BOOL
**********************************************************/
BOOL CDib::RotateCertainAngle(int angle)
{
	HDIB hNewDib = RotateCertainAngleDIB(m_hDib, angle);
	if(!hNewDib)
		return FALSE;
	Destroy();
	m_hDib = hNewDib;

	return UpdateInternal();
}
/*************************************************
自适应选取阈值并二值化
parameter:   void
return:      BOOL
*************************************************/
BOOL CDib::AutoBinary()
{
    HDIB hNewDib = AutoBinaryDIB(m_hDib);
	if(!hNewDib)
		return FALSE;
	Destroy();
	m_hDib = hNewDib;

	return UpdateInternal();
}
/*************************************************
直方图均衡化
parameter:   void
return:      BOOL
*************************************************/
BOOL CDib::HistoEquivalize()
{
	HDIB hNewDib = HistoEquivalizeDIB(m_hDib);
	if(!hNewDib)
		return FALSE;
	Destroy();
	m_hDib = hNewDib;

	return UpdateInternal();
}
/*************************************************
伪彩色处理
parameter:   void
return:      BOOL
*************************************************/
BOOL CDib::PseudoColor()
{
	HDIB hNewDib = PseudoColorDIB(m_hDib);
	if(!hNewDib)
		return FALSE;
	Destroy();
	m_hDib = hNewDib;

	return UpdateInternal();
}
/*************************************************
调整亮度
parameter:   int(increment of brightness)
return:      BOOL
*************************************************/
BOOL CDib::ChangeBrightness(int v)
{
	HDIB hNewDib = AdjustDIBBrightness(m_hDib, v);
	if(!hNewDib)
		return FALSE;
	Destroy();
	m_hDib = hNewDib;

	return UpdateInternal();
}
/*************************************************
调整对比度
parameter:   double(coefficient)
return:      BOOL
*************************************************/
BOOL CDib::ChangeContrast(double v)
{
	HDIB hNewDib = AdjustDIBContrast(m_hDib, v);
	if(!hNewDib)
		return FALSE;
	Destroy();
	m_hDib = hNewDib;

	return UpdateInternal();
}
/*************************************************
'Ln' transformation
parameter:   void
return:      BOOL
*************************************************/
BOOL CDib::LnTrans()
{
	HDIB hNewDib = LnTransDIB(m_hDib);
	if(!hNewDib)
		return FALSE;
	Destroy();
	m_hDib = hNewDib;

	return UpdateInternal();
}
/*************************************************
'Log' transformation
parameter:   void
return:      BOOL
*************************************************/
BOOL CDib::LogTrans()
{
	HDIB hNewDib = LogTransDIB(m_hDib);
	if(!hNewDib)
		return FALSE;
	Destroy();
	m_hDib = hNewDib;

	return UpdateInternal();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -