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

📄 显示浮雕文字效果.txt

📁 数字图像处理技术源代码
💻 TXT
字号:
//函数参数说明:
//hBitmap 传进来的处理位图
//hbmBackGnd 背景位图
//hPal 调色板
//braised 凹凸选择
//xDest 绘图起始点的x坐标
//yDest 绘图起始点的y坐标
//chHightlight 高光颜色
//chShadow 阴影颜色
//函数说明: 该函数实现文字的浮雕处理
HBITMAP Emboss( HBITMAP hBitmap, HBITMAP hbmBackGnd, HPALETTE hPal, 
			   BOOL bRaised, int xDest, int yDest, 
			   COLORREF clrHighlight, COLORREF clrShadow )
{	
	//光栅操作码
	const DWORD PSDPxax = 0x00B8074A;
	//位图信息
	BITMAP   	bmInfo ;
	//源位图,阴影、高光、结果、内存区位图
	HBITMAP  hbmOld, hbmShadow, hbmHighlight, hbmResult, hbmOldMem ;
	//画刷
	HBRUSH   hbrPat ;
	//定义显示DC、颜色DC、内存DC
	HDC      hDC, hColorDC, hMonoDC, hMemDC ;
	if( !bRaised )
	{
		// 交换高光和阴影的颜色
		COLORREF clrTemp = clrShadow;
		clrShadow = clrHighlight;
		clrHighlight = clrTemp;
	}
	
	hbmResult = NULL ;
	hDC = GetDC( NULL ) ;
	
	//创建一个共存的DC
	hMemDC = ::CreateCompatibleDC( hDC );
	hMonoDC = CreateCompatibleDC( hDC );
	hColorDC = CreateCompatibleDC( hDC );
	//查看资源分配
	if( hMemDC == NULL || hMonoDC == NULL || hColorDC == NULL )
	{
		if( hMemDC ) DeleteDC( hMemDC );
		if( hMonoDC ) DeleteDC( hMonoDC );
		if( hColorDC ) DeleteDC( hColorDC );
		return NULL;
	}
	
	//选中背景到内存DC以便绘制
	hbmOldMem = (HBITMAP)::SelectObject( hMemDC, hbmBackGnd );
	
	//得到背景图片的纬数
	BITMAP bm;
	//把图片数据读入bm
	::GetObject( hbmBackGnd, sizeof( bm ), &bm );
	
	GetObject( hBitmap, sizeof( BITMAP ), (LPSTR) &bmInfo ) ;
	// 创建阴影、高光、结果位图数据区
	hbmShadow =
		CreateBitmap( bmInfo.bmWidth, bmInfo.bmHeight, 1, 1, NULL ) ;
	hbmHighlight =
		CreateBitmap( bmInfo.bmWidth, bmInfo.bmHeight, 1, 1, NULL ) ;
	hbmResult =
		CreateCompatibleBitmap( hDC, bm.bmWidth, bm.bmHeight ) ;
	hbmOld = (HBITMAP)SelectObject( hColorDC, hBitmap ) ;
	
	// 设置背景颜色以便处理
	//我们假设左上角的颜色为背景色
	SetBkColor( hColorDC, GetPixel( hColorDC, 0, 0 ) ) ;
	
	// 创建高光位图
	hbmHighlight = (HBITMAP)SelectObject( hMonoDC, (HGDIOBJ) hbmHighlight ) ;
	PatBlt( hMonoDC, 0, 0, bmInfo.bmWidth, bmInfo.bmHeight, WHITENESS ) ;
	BitBlt( hMonoDC, 0, 0, bmInfo.bmWidth - 1, bmInfo.bmHeight - 1,
		hColorDC, 1, 1, SRCCOPY ) ;
	BitBlt( hMonoDC, 0, 0, bmInfo.bmWidth, bmInfo.bmHeight,
		hColorDC, 0, 0, MERGEPAINT ) ;
	hbmHighlight = (HBITMAP)SelectObject( hMonoDC, (HGDIOBJ) hbmHighlight ) ;
	
	//创建阴影位图
	hbmShadow = (HBITMAP)SelectObject( hMonoDC, (HGDIOBJ) hbmShadow ) ;
	PatBlt( hMonoDC, 0, 0, bmInfo.bmWidth, bmInfo.bmHeight, WHITENESS ) ;
	BitBlt( hMonoDC, 1, 1, bmInfo.bmWidth-1, bmInfo.bmHeight-1,
		hColorDC, 0, 0, SRCCOPY ) ;
	BitBlt( hMonoDC, 0, 0, bmInfo.bmWidth, bmInfo.bmHeight,
		hColorDC, 0, 0, MERGEPAINT ) ;
	hbmShadow = (HBITMAP)SelectObject( hMonoDC, (HGDIOBJ) hbmShadow ) ;
	
	
	//接下来开始处理最终的位图
	SelectObject( hColorDC, hbmResult ) ;
	// 选中并实现调色板
	if( hPal && GetDeviceCaps(hDC, RASTERCAPS) & RC_PALETTE )
	{
		::SelectPalette( hColorDC, hPal, FALSE );
		::RealizePalette(hColorDC);
	}
	// 画背景
	BitBlt(hColorDC, 0, 0, bm.bmWidth, bm.bmHeight, hMemDC, 0, 0,SRCCOPY);
	// Restore the old bitmap in the hMemDC
	::SelectObject( hMemDC, hbmOldMem );
	
	// 设定背景,前景的颜色以便光栅操作
	SetBkColor( hColorDC, RGB(255,255,255) ) ;
	SetTextColor( hColorDC, RGB(0,0,0) ) ;
	
	// 显示高光边缘
	hbrPat = CreateSolidBrush( clrHighlight ) ;
	hbrPat = (HBRUSH)SelectObject( hColorDC, hbrPat ) ;
	hbmHighlight = (HBITMAP)SelectObject( hMonoDC, (HGDIOBJ) hbmHighlight ) ;
	BitBlt( hColorDC, xDest, yDest, bmInfo.bmWidth, bmInfo.bmHeight,
		hMonoDC, 0, 0, PSDPxax ) ;
	DeleteObject( SelectObject( hColorDC, hbrPat ) ) ;
	hbmHighlight = (HBITMAP)SelectObject( hMonoDC, (HGDIOBJ) hbmHighlight ) ;
	
	//显示阴影边缘
	hbrPat = CreateSolidBrush( clrShadow ) ;
	hbrPat = (HBRUSH)SelectObject( hColorDC, hbrPat ) ;
	hbmShadow = (HBITMAP)SelectObject( hMonoDC, (HGDIOBJ) hbmShadow ) ;
	BitBlt( hColorDC, xDest, yDest, bmInfo.bmWidth, bmInfo.bmHeight,
		hMonoDC, 0, 0, PSDPxax ) ;
	DeleteObject( SelectObject( hColorDC, hbrPat ) ) ;
	hbmShadow = (HBITMAP)SelectObject( hMonoDC, (HGDIOBJ) hbmShadow ) ;
	//把原图像调入DC 
	SelectObject( hColorDC, hbmOld ) ;
	DeleteObject( (HGDIOBJ) hbmShadow ) ;
	DeleteObject( (HGDIOBJ) hbmHighlight ) ;
	ReleaseDC( NULL, hDC ) ;
	return ( hbmResult ) ;
}

⌨️ 快捷键说明

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