永发信息网

◆◇高悬赏!100分◆◇◆◇vb中如何快速旋转图片◆◇◆◇◆◇

答案:5  悬赏:60  手机版
解决时间 2021-02-15 00:45
必须要快速,旋转图片框里的图片,回答请详细!

以下方法不行,太慢!
Dim x As Integer, y As Integer
Dim X1 As Integer, Y1 As Integer
Dim X2 As Double, Y2 As Double
Dim X3 As Double, Y3 As Double
Dim HuDu As Double
' JiaoDu角 度
HuDu = JiaoDu * Pi / 180 ' 弧 度
PicSource.ScaleMode = vbPixels
PicTarget.ScaleMode = vbPixels
For x = 0 To PicTarget.ScaleWidth
X1 = x - PicTarget.ScaleWidth \ 2
For y = 0 To PicTarget.ScaleHeight
Y1 = y - PicTarget.ScaleHeight \ 2
X2 = X1 * Cos(-HuDu) + Y1 * Sin(-HuDu)
Y2 = Y1 * Cos(-HuDu) - X1 * Sin(-HuDu)
X3 = X2 + PicSource.ScaleWidth \ 2
Y3 = Y2 + PicSource.ScaleHeight \ 2
If X3 > 0 And X3 < PicSource.ScaleWidth - 1 And Y3 > 0 And Y3 < PicSource.ScaleHeight - 1 Then
PicTarget.PSet (x, y), PicSource.Point(X3, Y3)
End If
Next y
Next x

楼下的,请不要发广告!!!!!!!!!!

3楼,必须要自由旋转!

急啊,请大家帮忙~~~~~~~~~
最佳答案
启动vb6建立一个标准exe工程,首先添加两个图片框(picture1和picture2),添加三个命令按钮command1(caption=“正常显示”)、command2(caption=“180度倒立”)、command3(caption=“45度旋转”),双击窗体,写入以下代码:
PrivateConstSRCCOPY=&HCC0020
PrivateConstPi=3.14

PrivateDeclareFunctionSetPixelLib"gdi32"(ByValhdcAsLong, ByValxAsLong,ByValyAsLong,ByValcrColorAsLong)AsLong
PrivateDeclareFunctionGetPixelLib"gdi32"(ByValhdcAsLong, ByValxAsLong,ByValyAsLong)AsLong

PrivateDeclareFunctionStretchBltLib"gdi32"(ByValhdcAsLong, ByValxAsLong,ByValyAsLong,ByValnWidthAsLong,ByValnHeightAsLong, ByValhSrcDCAsLong,ByValxSrcAsLong,ByValySrcAsLong,ByValnSrcWidth AsLong,ByValnSrcHeightAsLong,ByValdwRopAsLong)AsLong

privateSubbmp_rotate(pic1AsPictureBox,pic2AsPictureBox,ByValtheta)‘45度旋转
Dimc1xAsInteger,c1yAsInteger
Dimc2xAsInteger,c2yAsInteger
DimaAsSingle
Dimp1xAsInteger,p1yAsInteger
Dimp2xAsInteger,p2yAsInteger
DimnAsInteger,rAsInteger

c1x=pic1.ScaleWidth\2
c1y=pic1.ScaleHeight\2
c2x=pic2.ScaleWidth\2
c2y=pic2.ScaleHeight\2
Ifc2x$#@60;c2yThenn=c2yElsen=c2x
n=n-1
pic1hDC=pic1.hdc
pic2hDC=pic2.hdc
Forp2x=0Ton
Forp2y=0Ton
Ifp2x=0Thena=Pi/2Elsea=Atn(p2y/p2x)
r=Sqr(1&*p2x*p2x+1&*p2y*p2y)
p1x=r*Cos(a+theta)
p1y=r*Sin(a+theta)
c0&=GetPixel(pic1hDC,c1x+p1x,c1y+p1y)
c1&=GetPixel(pic1hDC,c1x-p1x,c1y-p1y)
c2&=GetPixel(pic1hDC,c1x+p1y,c1y-p1x)
c3&=GetPixel(pic1hDC,c1x-p1y,c1y+p1x)
Ifc0&$#@60;$#@62;-1ThenSetPixelpic2hDC,c2x+p2x,c2y+p2y,c0
Ifc1&$#@60;$#@62;-1ThenSetPixelpic2hDC,c2x-p2x,c2y-p2y,c1
Ifc2&$#@60;$#@62;-1ThenSetPi pic2hDC,c2x+p2y,c2y-p2x,c2
Ifc3&$#@60;$#@62;-1ThenSetPixelpic2hDC,c2x-p2y,c2y+p2x,c3
Next
Next
EndSub

PrivateSubCommand1_Click()‘正常复制
Picture2.Cls
px=Picture1.ScaleWidth
py=Picture1.ScaleHeight
StretchBltPicture2.hdc,px,0,-px,py,Picture1.hdc,0,0,px,py,SRCCOPY
EndSub

PrivateSubCommand2_Click()‘180度倒立
Picture2.Cls
px=Picture1.ScaleWidth
py=Picture1.ScaleHeight
StretchBltPicture2.hdc,0,py,px,-py,Picture1.hdc,0,0,px,py,SRCCOPY
EndSub

PrivateSubCommand3_Click()‘45旋转
Picture2.Cls
Callbmp_rotate(Picture1,Picture2,3.14/4)
EndSub

PrivateSubForm_Load()
OnErrorResumeNext
Me.Caption=App.Title"添加应用程序标题
Me.Left=(Screen.Width-Me.Width)/2
Me.Top=(Screen.Height-Me.Height)/2"窗体具中
Picture1.ScaleMode=3
Picture2.ScaleMode=3
EndSub
全部回答
哦,我不知,路过```````````````````````````````
恩,见过类似的源码
................ 再看看别人怎么说的。
过路轱辘轱辘……
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
大家唱歌厅地址好找么,我有些事要过去
德玉堂怎么去啊,有知道地址的么
【绥靖的意思】鄂豫绥靖阻遏锐不可当分别是什
88音乐厅地址在哪,我要去那里办事
上海什么地方可以考厨师证
甚好近义词
东方娱乐城地址好找么,我有些事要过去
本田大鲨打不着车怎么回事
用6个棱长是1厘米的小正方体拼成长方体,有几
中国移动巴克什营营业厅地址在什么地方,想过
长安桥歌厅怎么去啊,我要去那办事
襄平街道地址在哪,我要去那里办事
"我一见你就笑." 这个是歌词, 歌名是什么?
金海岸歌厅地址在什么地方,想过去办事
武汉市交通学校女生宿舍地址在哪,我要去那里
推荐资讯
大家晒一下做计调每月的工资,看看旅游业是不
护国寺小吃店 哪家店最好吃。以及坐地铁怎么
英雄连勇气传说怎么让尸体永久保存?
李大钊在《自然的伦理观与孔子》(1917年2月
这个配置完恶霸鲁尼奖学金版怎么老卡
园长管理理念是园长对幼儿园管理全过程、各要
埇桥区国土资源局符离国土所地址在什么地方,
初中有机高分子物质有哪些
大堰劳教所职工住宅区二号院地址在哪,我要去
徐庄加油站地址在什么地方,想过去办事
造成3389端口是个漏洞的原因是什么??
车行驶中我如果换挡换成倒档会怎么样啊?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?