收录日期:2019/05/22 09:31:15 时间:2016/07/04 20:03:27 标签:VB基础类
小弟是VB初学者(堪称小白),查了不少资料好不容易学会“用vb调用GDI+任意角度旋转图像”;
但发现旋转后图像边缘的【锯齿效果严重】,不知在vb下,如何解决GDI+旋转图片后的锯齿问题?注意是旋转的是图像不是图形~


查了很多网上信息,没有找到类似情况下用的;仅从一些相关讨论中听到“插值”一说,但在这个条件下具体该如何使用呢,恳请高人给予具体的指点或范例!感激不尽
坦白:本人水平实在有限,只能基本模仿套用一些具体的方法和代码,请有经验的高人耐心明示,谢谢谢谢

'GDI+旋转
Private Declare Function GdipRotateWorldTransform Lib "gdiplus" (ByVal graphics As Long, ByVal angle As Single, ByVal order As MatrixOrder) As GpStatus
'所谓的GDI+反锯齿的函数,可惜是对线、图形反锯齿的,对图像没感觉...
Private Declare Function GdipSetSmoothingMode Lib "gdiplus" (ByVal graphics As Long, ByVal SmoothingMd As SmoothingMode) As GpStatus

如果利用插值的话,是在GDI+旋转图像后,对图像边缘的点进行处理,然后再用GDI+的 GdipDrawImage 输出图像,思路对么?如何具体实现呢,恳求范例代码
自己顶起来,关于vb调用GDI+的内容太少了,恳求高人指点哇
在GDI中消除锯齿的一个做法是,将该点的X和Y值各加减1,再绘一次:
如当前点为(3,4),再在(4,5)和(2,3)位置画一点.效果可能会好些.

这是微软在C#下在做法:
http://msdn.microsoft.com/zh-cn/library/9t6sa8s9.aspx
感谢楼上的指点,可惜小弟确实水平有限,仅靠思路很难靠自己实现,确实需要更具体的范例或者思路讲解...

目前我理解的思路是:  
1、GDI+对图像旋转;
2、GDI+画出图像;
3、算出旋转后图像四个边缘的各个点的坐标;
4、利用GetPixel SetPixel 配合插值算法将各个坐标点重画

不知道这样理解是否正确,另外第3-4步 具体该如何计算怎么实现呢?
你用GDI+了,应该可以用这个函数:AntiAlias
例子:
myGraphics.SmoothingMode = SmoothingMode.AntiAlias
myGraphics.DrawLine(myPen, 0, 0, 12, 8)
你再试下.
恩,SmoothingMode 的 AntiAlias 我之前用过了,帖子也提到了:【只是对线、图形有一定的反锯齿效果,对图像没感觉... 】
其他像 InterpolationMode 、 CompositingQuality 都试过了,对于旋转图像的反锯齿没效果。。 除非我用错了..
参看http://msdn.microsoft.com/zh-cn/library/3b575a03.aspx里边的范例图示也是锯齿明显

目前我正在琢磨通过画图像的3个角的坐标点,计算图像边缘各点坐标,然后GetPixel SetPixel ,我基础水平太差,所以缓慢研究中~

再次感谢“杨哥儿”热心回帖~!


有关Java入门的题目 关于Page_Load()事件的疑问.. apache模块开发,怎么才能函数自动补全呢 谁编译过PHP源码? 请问,如何复制程序设置 关于ASP.NET数据缓存的问题 客户端批量上传文件的问题 为什么加了TextBox的Focus事件后不能切换中文输入法? 深圳南山科技园附近周边30分钟车程内单间有木有400以内的 Android中double类型计算 求教下面一段文字的事例 CopyFile的问题 有CATIA V5 CAA二次开发的群或者论坛吗 要不要用ASP.NET母版页MasterPage? 没有人生规划的人,毕业=火坑 关于C 中汉字的比较问题 百度人才网java工程师的待遇和百度总部是一样的么 awt窗口问题 说说你是什么样的人生:看电视的人生,发呆的人生,睡觉的人生还是积极的人生 stratus 一个developer key 可以建立多少个p2p链接 关于输入输入操作符重载 安装flex4的插件版没有不响应 c#视频实例教学教程 网站 如何获得文本文件的总行数 北京的兄弟姐妹们帮帮忙,调查一下各个IT公司的上下班时间 跪求:请各位ibatis高人指点下面这个错误,万分感谢! 关于Microsoft.Office的ppt转换成jpg的问题 如何实现插入U盘才能进入系统? 你们用C++语言的公司,都是用的是哪个版本的开发工具 发错短信,糗大了~~