迅雷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;
}

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



记录,为更好的自己!

时间: 2024-11-01 16:56:46

迅雷Bolt图像拉伸不清晰的解决办法的相关文章

C#一例绘制字体不清晰的解决办法

public static Bitmap GetPieWithText(String text, Color color, Color fontColor,Font font) { int size = 22; Bitmap bmp = new Bitmap(size, size); Graphics g = Graphics.FromImage(bmp); g.SmoothingMode = SmoothingMode.AntiAlias; //使绘图质量最高,即消除锯齿 g.Interpol

迅雷Bolt的ClipSubBindBitmap函数特别说明

因为在工作中基于迅雷Bolt开发的是IM产品,需要实现自定义用户头像的功能. 但Bolt中对图像的默认拉伸锯齿效果非常明显,所以自己实现了图像拉伸函数,代码已共享,具体可查看:<迅雷Bolt图像拉伸不清晰的解决办法>. 不过在这个函数的使用中,遇到了使用ClipSubBindBitmap裁切后再拉伸,图像不显示的Bug,示例代码: hCutBitmap虽然不为空,但却不显示,后来跟龙哥(幻灰龙)沟通,注意到Bitmap类的ClipSubBindBitmap函数的说明: ClipSubBindB

第六章 - 图像变换 - 图像拉伸、收缩、扭曲、旋转[1] - 仿射变换(cvWarpAffine)

拉伸.收缩.扭曲.旋转是图像的几何变换,在三维视觉技术中大量应用到这些变换,又分为仿射变换和透视变换.仿射变换通常用单应性建模,利用cvWarpAffine解决密集映射,用cvTransform解决稀疏映射.仿射变换可以将矩形转换成平行四边形,它可以将矩形的边压扁但必须保持边是平行的,也可以将矩形旋转或者按比例变化.透视变换提供了更大的灵活性,一个透视变换可以将矩阵转变成梯形.当然,平行四边形也是梯形,所以仿射变换是透视变换的子集. 本小节实现图像的仿射变换. -----------------

mp4网页播放代码,有声音无图像的解决办法~

mp4网页播放代码,有声音无图像的解决办法~ 关于网页播放mp4格式的视频,找了一些插件,这里推荐一下video.js 官方网址:http://www.videojs.com/ github :https://github.com/videojs/video.js/ demo:http://www.videojs.com/downloads/video-js-4.12.5.zip 使用方法: ①引入文件:指派flash播放的swf文件 <link href="//example.com/p

第六章 - 图像变换 - 图像拉伸、收缩、扭曲、旋转[2] - 透视变换(cvWarpPerspective)

透视变换(单应性?)能提供更大的灵活性,但是一个透视投影并不是线性变换,因此所采用的映射矩阵是3*3,且控点变为4个,其他方面与仿射变换完全类似,下面的例程是针对密集变换,稀疏图像变换则采用cvPerspectiveTransform函数来处理. ------------------------------------------------------------------------------------------------ WarpPerspective 对图像进行透视变换 voi

NIVIDIA Tegra K1 QWT安装使用问题和解决办法

在Linux系统下,Tegra K1(ARM体系),只有QtCreator的环境下,去安装Qwt6.1.0: 下载: 系统安装好之后,直接联网在系统自带的软件安装程序中搜索Qt,安装Qt5.2.1,之后去http://sourceforge.net/projects/qwt/files/下载 进入之后,选择6.1.0版本,如下图: 然后选择qwt-6.1.0.tar.bz2格式的压缩包(qwt-6.1.0.qch是帮助文档,就是Qtcteator里面F1帮助界面显示的内容),用于Linux操作系

HttpClient的CircularRedirectException异常原因及解决办法

HttpClient的CircularRedirectException异常原因及解决办法 这两天在使用我自己爬虫抓取网页的时候总是出现 org.apache.http.client.ClientProtocolException at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:909) at org.apache.http.impl.client.AbstractHttpClie

Android SDK更新以及ADT更新出现问题的解决办法(转载)

转自:http://zyueqi.iteye.com/blog/1474323 问题描述 使用SDK Manager更新时出现问题Failed to fetch URL https://dl-ssl.google.com/android/repository/repository-6.xml, reason: Connection to https://dl-ssl.google.com refusedFailed to fetch URL http://dl-ssl.google.com/an

vs2008调用opencv2.4.9的imread()函数失败解决办法

这两天在看opencv的C++接口函数,刚开始就出现问题: 一个简单的显示图像的程序,就是运行不成功: #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <string> using std::string; using namespace cv; int main() { string str="E:\\test\\LENA.BMP";