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

📄 image.cpp

📁 这是一款蛮COOL的图像处理系统
💻 CPP
字号:
// Image.cpp: implementation of the CImage class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "QuickImage.h"
#include "Image.h"
#include <math.h>

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CImage::CImage()
{
	*m_szPathName='\0';
	m_iWidth=m_iHeight=0;
}

CImage::~CImage()
{

}

BOOL CImage::ReadFromFile(const LPCTSTR lpszFile)
{
	return TRUE;
}

HDIB CImage::Show()
{
	return NULL;
}

void CImage::Properties(int *Histogram, double &dMean, double &dStdDev, double &dShang,
		const LPSTR lpBits, int iPixels, int iColors)
{
	ASSERT(NULL != lpBits);
	ASSERT(NULL != Histogram);
	int iValue;
	dMean = dStdDev = dShang = 0.0;
	for(int i = 0; i< 256; i++)
	{
		Histogram[i] = 0;
	}
	if(iColors < 257)
	{
		BYTE *pBits = (BYTE*)lpBits;
		for(i =0; i< iPixels; i++, pBits++)
		{
			Histogram[*pBits] ++;
		}
		
		for(i = 0; i < 256; i++)
		{
			iValue = Histogram[i];
			dMean += iValue * i;
			if(iValue != 0)
			{
				dStdDev = (double)iValue / iPixels;
				dShang -= dStdDev * log10(dStdDev) / log10(2.0);
			}
		}
		dMean /= (double)iPixels;
		
		pBits = (BYTE*)lpBits;
		dStdDev = 0;
		double d;
		for(i = 0; i < iPixels; i++, pBits++)
		{
			d = double(*pBits) - dMean;
			dStdDev += (d * d);
		}
		dStdDev = sqrt(dStdDev / iPixels);
	}
	else
	{
		//int iGray;
	}
}

const HDIB CImage::HistoEqualize(const HDIB hDIB)
{
	ASSERT(NULL != hDIB);
	LPSTR lpDIB = (LPSTR)GlobalLock(hDIB);
	if(NULL == lpDIB)
	{
		return NULL;
	}
	int iWidth = ::DIBWidth(lpDIB);
	int iPixel = iWidth * abs(::DIBHeight(lpDIB));
	int iColors = ::DIBNumColors(lpDIB);
	int Histogram[256];
	double dMean, dStdDev, dShag;
	LPSTR lpBits = ::FindDIBBits(lpDIB);
	double dGray = 255.0 / (double)iPixel;
	int i;
	HDIB hRet = NULL;
	if(iColors < 257)
	{
		Properties(Histogram, dMean, dStdDev, dShag, lpBits, iPixel, iColors);
		for(i = 1 ; i < 256; i++)
		{
			Histogram[i] += Histogram[i-1];
		}
		BYTE *pByte = (BYTE*)lpBits;
		for(i = 0; i < iPixel; i++, pByte++)
		{
			*pByte = BYTE(dGray * Histogram[*pByte]);
		}
		hRet = ::GenBmp(iWidth, ::DIBHeight(lpDIB), 8, (BYTE*)lpBits);
	}
	else
	{
	}
	GlobalUnlock(hDIB);
	return hRet;
}

⌨️ 快捷键说明

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