如何能实现图片任意角度的旋转,完成后保存成一个新的文件
解决方案 »
- 我的积分为什么被扣了?
- 哪位高手会在VB中用MSHTML获取table中的数据?我的代码报错!
- 求助!vb shell问题
- 新菜鸟:VB数据库编程的疑问?
- vb 怎样控制 word 中的表格的行、列对其方式及调用 ‘表格自动套用格式‘功能
- 有窗体本身的位置坐标函数吗?如果有,怎么用?
- 请问如何得到<object>里的<EMBED>(Flash)内容?
- 杀病毒求救!!------高分请教
- sendkeys在单cpu和双cpu下表现完全不同?!
- 求助,窗体里的控件全屏化
- 如何更改\HKEY_CURRENT_USER\Software\Microsoft\Internet Account Manager\Accounts\的键值
- 超级难道,会读写内存的高手们帮帮我
再来一遍吧(大致思路\步骤)——
1-将源图加载到stdpicture对象stdPic中
stdPic=loadpicture(...)
2-将stdPic放到内存DC对象hMemDc中
hMemDc = CreateCompatibleDC(hdc)
DeleteObject SelectObject(hMemDc, stdPic.Handle)
3-获取源文件的宽、高
stdPicWidth = ScaleX(stdPic.Width, vbHimetric, vbPixels)
stdPicHeight = ScaleY(stdPic.Height, vbHimetric, vbPixels)
4-创建另一内存DC对象hMemDc1,大小为hMemDc的宽、高对调,用于存放旋转90度后的位图
hMemDc1 = CreateCompatibleDC(hdc)
hBmp = CreateCompatibleBitmap(hdc, stdPicHeight , stdPicWidth ) '注意宽、高对调了位置
DeleteObject SelectObject(hMemDc1, hBmp)
5-将hMemDc中的位置旋转90度后贴到hMemDc1上,使用PlgBlt:
Dim Pt(0 To 2) As POINTAPI
Pt(0).X = stdPicHeight
Pt(0).Y = 0
Pt(1).X = stdPicHeight
Pt(1).Y = stdPicWidth
Pt(2).X = 0
Pt(2).Y = 0
PlgBlt .hdc, Pt(0), hMemDc, 0, 0, stdPicWidth, stdPicHeight, ByVal 0&, ByVal 0&, ByVal 0&
6-将内存DC中位图保存为磁盘文件
请参考本人的Blog文章:http://blog.csdn.net/xinliangyu/archive/2005/01/31/274900.aspx
可是,PlgBlt是只能在windows nt下用的,98肯定用不了,xp没试过。(我只是看了一个朋友整理的api手册):
适用平台
Windows NT
另外,请楼主看下thirdapple的连接,zyl910写的,里面第一个程序就是~