首页 > 代码库 > 迅雷Bolt图像拉伸不清晰的解决办法

迅雷Bolt图像拉伸不清晰的解决办法

迅雷Bolt库中的图像拉伸的效果锯齿比较严重,常见的导致锯齿的情况:

1、在使用ImageObject时,drawmode为1拉伸模式下;

2、使用Bitmap类的Stretch函数拉伸图像;

虽然ImageObject有antialias属性支持反走样,不过设置后没有特别明显的优化效果。

技术分享

解决锯齿的办法就是用C++编写拉伸函数,大家在处理时可以参考我写的处理函数:

int CXLuaCImpl::StretchBitmap(lua_State* luaState){	XL_BITMAP_HANDLE hXLBitmap = NULL;	if (XLUE_CheckBitmap(luaState, 2, &hXLBitmap))	{		int nWidth = lua_tointeger(luaState,3);		int nHeight = lua_tointeger(luaState,4);		CImage oldImage;		CImage newImage;				HBITMAP hBitmap = TransparentImage(XLGP_ConvertXLBitmapToDIB(hXLBitmap, 32));		oldImage.Attach(hBitmap);		if(!newImage.CreateEx(nWidth, nHeight, 24, BI_RGB))		{			oldImage.Detach();			return 0;		}		int nPreMode = ::SetStretchBltMode(newImage.GetDC(),  HALFTONE);		newImage.ReleaseDC();		oldImage.Draw(newImage.GetDC(), 0, 0, nWidth, nHeight, 0, 0, oldImage.GetWidth(), oldImage.GetHeight());		newImage.ReleaseDC();		::SetBrushOrgEx(newImage.GetDC(), 0, 0, NULL); 		newImage.ReleaseDC();		::SetStretchBltMode(newImage.GetDC(), nPreMode);		newImage.ReleaseDC();				oldImage.Detach();		hXLBitmap = XLGP_ConvertDDBToXLBitmap(CClientDC(NULL), newImage.Detach(), XLGRAPHIC_CT_ARGB32);		XLUE_PushBitmap(luaState,hXLBitmap);		return 1;	}	return 0;}

函数没有使用专业的处理算法,不过锯齿明显有改善,能满足日常需求。

技术分享


 

记录,为更好的自己!

迅雷Bolt图像拉伸不清晰的解决办法