?? 圖像增強技術.txt
字號:
//參數說明:
//hDIB 圖像數據句柄
//n 對比增強的強度值
//函數說明:該函數實現圖像對比度增強的功能
HDIB DIB::ContrastEnhance(HANDLE hDIB,int n)
{
//用來保存數據
HDIB hNewDIB;
LPBITMAPINFOHEADER lpbi;
//源數據區和新數據去指針
LPBYTE lpSDIBBits,lpDDIBBits;
int width,height,wBytesPerLine;
if(!hDIB)
return NULL;
//得到每行圖像的字節數目
wBytesPerLine = this->BytePerLine(hDIB);
//鎖定數據區
lpbi = (LPBITMAPINFOHEADER)GlobalLock(hDIB);
width = lpbi->biWidth;
height = lpbi->biHeight;
lpSDIBBits = (LPBYTE)lpbi;
//分配內存
hNewDIB = GlobalAlloc(GHND,lpbi->biSize+lpbi->biSizeImage);
if(!hNewDIB)
return NULL;
lpDDIBBits = (LPBYTE)GlobalLock(hNewDIB);
memcpy(lpDDIBBits,lpSDIBBits,lpbi->biSize);
//使得兩個指針指向數據區開始位置
lpSDIBBits = lpSDIBBits + lpbi->biSize;
lpDDIBBits = lpDDIBBits + lpbi->biSize;
BYTE rgb;
long lOffset;
for(int i=0;i<height;i++)
for(int j=0;j<width;j++)
{
//得到點在數據區中的偏移
lOffset = this->PixelOffset(i,j,wBytesPerLine);
//得到數據
rgb = *(lpSDIBBits+lOffset);
//對比度增強
this->IncreaseContrast(&rgb,n);
//保存數據
*(lpDDIBBits+lOffset++) = rgb;
*(lpDDIBBits+lOffset++) = rgb;
*(lpDDIBBits+lOffset ) = rgb;
}
GlobalUnlock(hDIB);
GlobalUnlock(hNewDIB);
return hNewDIB;
}
void DIB::IncreaseContrast(BYTE *pByte,int n)
{
//根據參數n來調節對比度,n越大,對比越強烈
int Low = n;
int High = 255-n;
float Grad = ((float)(High-Low))/255;
//數據很小,設置為0
if(*pByte<=Low)
*pByte = 0;
//中間數據,進行對比增強處理
else if ((Low<*pByte)&&(*pByte<High))
*pByte = (BYTE)((*pByte-Low)/Grad);
//數據很大,設置為255
else
*pByte = 255;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -