Foxtable(狐表)用户栏目专家坐堂 → [求助]图片旋转问题


  共有4591人关注过本帖树形打印复制链接

主题:[求助]图片旋转问题

帅哥哟,离线,有人找我吗?
有点甜
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/3/16 10:35:00 [显示全部帖子]

 呃,弄错了对象......汗.....

 

Dim bmpSource As Image = getimage("d:\test.jpg")
Dim bmpSrc As new Bitmap(bmpSource.Width, bmpSource.Height)
Dim g = Graphics.FromImage(bmpSrc)

Dim w As Integer = bmpSource.Width
Dim h As Integer = bmpSource.Height

g.TranslateTransform(w/2, h/2)
g.RotateTransform(20)
g.TranslateTransform(-w/2, -h/2)
g.DrawImage(bmpSource, 0, 0)

bmpSrc.Save("d:\test2.jpg")

g.Dispose()
bmpSrc.Dispose


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/3/16 15:35:00 [显示全部帖子]

Dim bmpSource As Image = getimage("d:\test.jpg")
Dim w As Integer = bmpSource.Width
Dim h As Integer = bmpSource.Height

Dim angle As Double = -20
Dim a As Double = angle Mod 360


Dim radian As Double = a * Math.PI / 180.0
Dim cos As Double = Math.Cos(radian)
Dim sin As Double = Math.Sin(radian)

Dim newW As Integer = Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin))
Dim newH As Integer = Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos))

Dim bmpSrc As new Bitmap(newW, newH)
Dim g = Graphics.FromImage(bmpSrc)

g.TranslateTransform(newW/2, newH/2)
g.RotateTransform(angle)
g.TranslateTransform(-newW/2, -newH/2)
Dim x As Integer = (newW-w)/2
Dim y As Integer = (newH-h)/2
g.DrawImage(bmpSource, x, y, w, h)

bmpSrc.Save("d:\test2.jpg")

g.Dispose()
bmpSrc.Dispose

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/3/16 15:59:00 [显示全部帖子]

1、请对原图修改,不要对已修改的修改。或者你重新定义图片控件的宽度和高度

 

2、背景颜色。

 

Dim bmpSource As Image = getimage("d:\test.jpg")
Dim w As Integer = bmpSource.Width
Dim h As Integer = bmpSource.Height

Dim angle As Double = -20
Dim a As Double = angle Mod 360


Dim radian As Double = a * Math.PI / 180.0
Dim cos As Double = Math.Cos(radian)
Dim sin As Double = Math.Sin(radian)

Dim newW As Integer = Math.Max(Math.Abs(w * cos - h * sin), Math.Abs(w * cos + h * sin))
Dim newH As Integer = Math.Max(Math.Abs(w * sin - h * cos), Math.Abs(w * sin + h * cos))

Dim bmpSrc As new Bitmap(newW, newH)
Dim g = Graphics.FromImage(bmpSrc)

g.FillRectangle(Brushes.Red,0,0,newW,newH)

g.TranslateTransform(newW/2, newH/2)
g.RotateTransform(angle)
g.TranslateTransform(-newW/2, -newH/2)
Dim x As Integer = (newW-w)/2
Dim y As Integer = (newH-h)/2
g.DrawImage(bmpSource, x, y, w, h)

 

bmpSrc.Save("d:\test2.jpg")

g.Dispose()
bmpSrc.Dispose

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/3/16 16:42:00 [显示全部帖子]

 有多麻烦?不就是记录一下旋转的角度么?对应的操作一下即可。

 

 旋转以后,图片就是改变了的,不能对旋转后的图片再调整。


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2015/3/16 18:41:00 [显示全部帖子]

 如果你要加入翻转功能。

 

 就必须用一个集合,记录每一步的动作。比如 旋转20,翻转,旋转50,

 

 然后根据动作,从原图一步一步的还原。


 回到顶部