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

📄 灰度拉伸.txt

📁 数字图像处理技术源代码
💻 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 + -