zoukankan      html  css  js  c++  java
  • 迅雷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;
    }
    

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


    记录,为更好的自己!

  • 相关阅读:
    时间戳 时间 相互转换
    CS Academy Remove Update
    一周水题集锦 2017 9.4
    计蒜客 16877 卡牌游戏
    计蒜客 16876 韩梅梅的抽象画
    九度OJ 题目1534:数组中第K小的数字
    CS Academy Switch the Lights
    CF AIM Tech Round 4 C. Sorting by Subsequences
    CF Round 430 C. Ilya And The Tree
    CS Academy Round 44 Check DFS
  • 原文地址:https://www.cnblogs.com/ym123/p/4174479.html
Copyright © 2011-2022 走看看