?? 灰度拉伸.txt
字號:
//參數說明:
//LPSTR lpDIBBits:指向源DIB圖像指針
//LONG lWidth: 源圖像寬度(象素數)
//LONG lHeight:源圖像高度(象素數)
//BYTE bX1:灰度拉伸第一個點的X坐標
//BYTE bY1:灰度拉伸第一個點的Y坐標
//BYTE bX2:灰度拉伸第二個點的X坐標
//BYTE bY2:灰度拉伸第二個點的Y坐標
//程序說明:
//該函數用來對圖像進行灰度拉伸。
BOOL WINAPI GrayStretch(LPSTR lpDIBBits, LONG lWidth, LONG lHeight, BYTE bX1, BYTE bY1, BYTE bX2, BYTE bY2)
{
// 指向源圖像的指針
unsigned char* lpSrc;
// 循環變量
LONG i;
LONG j;
// 灰度映射表
BYTE bMap[256];
// 圖像每行的字節數
LONG lLineBytes;
// 計算圖像每行的字節數
lLineBytes = WIDTHBYTES(lWidth * 8);
// 計算灰度映射表
for (i = 0; i <= bX1; i++)
{
// 判斷bX1是否大于0(防止分母為0)
if (bX1 > 0)
{
// 線性變換
bMap[i] = (BYTE) bY1 * i / bX1;
}
else
{
// 直接賦值為0
bMap[i] = 0;
}
}
for (; i <= bX2; i++)
{
// 判斷bX1是否等于bX2(防止分母為0)
if (bX2 != bX1)
{
// 線性變換
bMap[i] = bY1 + (BYTE) ((bY2 - bY1) * (i - bX1) / (bX2 - bX1));
}
else
{
// 直接賦值為bY1
bMap[i] = bY1;
}
}
for (; i < 256; i++)
{
// 判斷bX2是否等于255(防止分母為0)
if (bX2 != 255)
{
// 線性變換
bMap[i] = bY2 + (BYTE) ((255 - bY2) * (i - bX2) / (255 - bX2));
}
else
{
// 直接賦值為255
bMap[i] = 255;
}
}
// 每行
for(i = 0; i < lHeight; i++)
{
// 每列
for(j = 0; j < lWidth; j++)
{
// 指向DIB第i行,第j個象素的指針
lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;
// 計算新的灰度值
*lpSrc = bMap[*lpSrc];
}
}
// 返回
return TRUE;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -