在vb中如何用API函数旋转图片? vb里面怎么样让一张图片旋转?

作者&投稿:布园 (若有异议请与网页底部的电邮联系)
没听说过在image中旋转图片的(它连个hdc都没有),一般都是在picturebox里。具体的api可以用PlgBlt,它是专门实现图像旋转的,不过就是会出现锯齿,但是对你要求的90度,180度和270度就不会出现锯齿。这是我写的旋转函数:Function MyRotation(ByVal DesHdc As Long, ByVal SrcHdc As Long, ByVal DesX As Long, ByVal DesY As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal Angle As Single) As Long
Dim PI As Double
PI = 3.1415926
Dim lpPoint(1 To 3) As POINTAPI
Dim Rad As Double
Rad = Angle * PI / 180
lpPoint(3).x = DesX
lpPoint(3).y = DesX
lpPoint(1).x = lpPoint(3).x + nHeight * Sin(Rad)
lpPoint(1).y = lpPoint(3).y - nHeight * Cos(Rad)
lpPoint(2).x = lpPoint(1).x + nWidth * Cos(Rad)
lpPoint(2).y = lpPoint(1).y + nWidth * Sin(Rad)
PlgBlt DesHdc, lpPoint(1), SrcHdc, 0, 0, nWidth, nHeight, 0, 0, 0
End Function

picturebox就可以,用PLGBIT函数,,,程序如上,回答正确调用方式:MyRotation(目标HDC,源HDC,目标宽度,目标高度,源宽度,源高度,旋转的角度)============================================================================鉴定完毕!

怎么用vb实现图形的旋转?~

启动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

'GetPixel和SetPixel太慢了.系统有现成的API用. '本例子需要两个PictureBox,名称分别为PicBack和PicShow.一个CommandButton,名称:Command1. '在PicShow里载入一张图片,然后运行,点command1按钮,你就可以看到效果. Option Explicit Private Declare Function PlgBlt Lib "gdi32" (ByVal hdcDest As Long, lpPoint As POINTAPI, ByVal hdcSrc As Long, ByVal nXSrc As Long, ByVal nYSrc As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hbmMask As Long, ByVal xMask As Long, ByVal yMask As Long) As Long Private Type POINTAPI x As Long y As Long End Type Const NotPI = 3.14159265238 / 180 Private Sub DanRotate(ByRef picDestHdc As Long, xPos As Long, yPos As Long, ByVal Angle As Long, ByRef picSrcHdc As Long, srcXoffset As Long, srcYoffset As Long, ByVal srcWidth As Long, ByVal srcHeight As Long) Dim Points(3) As POINTAPI Dim DefPoints(3) As POINTAPI Dim sSin As Single, sCos As Single Dim ret As Long Points(0).x = -srcWidth * 0.5 Points(0).y = -srcHeight * 0.5 Points(1).x = Points(0).x + srcWidth Points(1).y = Points(0).y Points(2).x = Points(0).x Points(2).y = Points(0).y + srcHeight sSin = Sin(Angle * NotPI) sCos = Cos(Angle * NotPI) DefPoints(0).x = (Points(0).x * sCos - Points(0).y * sSin) + xPos DefPoints(0).y = (Points(0).x * sSin + Points(0).y * sCos) + yPos DefPoints(1).x = (Points(1).x * sCos - Points(1).y * sSin) + xPos DefPoints(1).y = (Points(1).x * sSin + Points(1).y * sCos) + yPos DefPoints(2).x = (Points(2).x * sCos - Points(2).y * sSin) + xPos DefPoints(2).y = (Points(2).x * sSin + Points(2).y * sCos) + yPos PlgBlt picDestHdc, DefPoints(0), picSrcHdc, srcXoffset, srcYoffset, srcWidth, srcHeight, 0, 0, 0 End Sub Private Sub Form_Load() picShow.ScaleMode = vbPixels picBack.ScaleMode = vbPixels End Sub Private Sub Command1_Click() DanRotate picBack.hDC, 100, 100, 45, picShow.hDC, 0, 0, picShow.ScaleWidth,picShow.ScaleHeight '(函数解释)DanRotate 目标(输出)的设备场景,X坐标,Y坐标,旋转角度,源设备场景,源设备场景X坐标,源设备场景Y坐标 picBack.Refresh '刷新窗体 End Sub

vb6.0 图象旋转
答:BmPlanes As Integer BmBitCount As Integer BmCompression As Long BmSizeImage As Long BmXPelsPerMeter As Long BmYPelsPerMeter As Long BmClrUsed As Long BmClrImportant As Long End Type Type BITMAPINFO BmHeader As BITMAPINFOHEADER End Type '下面是两个操作DIB的函数 Declare Sub ...

vb6 paintpicture及API Bitblt函数如何运用??
答:它简单易学、效率高,且功能强大可以与 Windows 专业开发工具SDK相媲美。在Visual Basic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用Windows内部的广泛应用程序接口(API)函数,动态链接库(DLL)、对象的链接与嵌入(OLE)、开放式数据连接(ODBC)等技术,可以高效、快速地开发Windows...

VB Image 控件如何图片反转
答:我倒是有个办法,但对于那个办法的语言不清楚,我的基础没到那。思路是:1.获得图片的象素(w * h)2.设置循环:输出第1列 = w - (w - i),在同时 h = h。3.完成。

vb如何让picturebox旋转
答:没有这样的API的,楼主还是结贴吧。不知道你要实现什么样的功能?一定要把picturebox旋转吗?我想一定有变通的或者更好的办法吧。picturebox是不可能旋转的,只可能平移 平移你可以使用SendMessage,但是要旋转那是做不到的 picturebox中的图象可以旋转,如果你是做数字图象处理,那么你可以将图象数据读入一个...

VB怎么用API函数·详细的?
答:三、几个问题的说明:(1)声明中的Lib 和 Alias 是怎么回事 一般情况下WIN32API函数总是包含在Windows系统自带的或是其它公司提供的动态连接库DLL中,而Declare语句中的Lib关键字就用来指定DLL(动态连接库)文件的路径,这样VB才能找到这个DLL文件,然后才能使用其中的API函数。如果我们只是列出DLL文件名...

vb中的API怎么使用(代码怎么写)?还有各个API函数怎么用?有使用手册吗...
答:As Long Public Declare Function TextOut Lib "gdi32" Alias "TextOutA" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal lpString As String, ByVal nCount As Long) As Long 有使用手册,百度搜索:vb api;或参考http://download.csdn.net/detail/math2357/245158 ...

AlphaBlend函数如何在VB6.0中通过API调用并实现图像混合?
答:...以此类推,计算蓝、绿和目标alpha通道。AlphaBlend函数在Windows NT(5.0及以上版本)、Windows(98及以上版本)、Windows CE(5.0及以上版本)中可用,使用wingdi.h头文件和msimg32.dll库。在Visual Basic 6.0中,可以通过如下API调用实现:Private Declare Function AlphaBlend Lib "msimg32.dll...

vb中的api函数getwindowrect怎么用?
答:Right As Long Bottom As Long End Type Private Declare Function GetWindowRect Lib "user32.dll" _(ByVal hwnd As Long, lpRect As Rect) As Long ' api声明 Private Sub Command1_Click()Dim r As Rect Dim retval As Long retval = GetWindowRect(Form1.hwnd, r) ' 获取当前窗体的Rect...

VB 用API读取图片,代码如何写?
答:'如果有选定的图像块则复制到剪贴板 Picture1.PaintPicture Picture1.Picture, _Shape1.Left, Shape1.Top, Shape1.Width, Shape1.Height, _Shape1.Left, Shape1.Top, Shape1.Width, Shape1.Height, _vbMergePait '使用OR运算使Picture1中Shape1所标识的部分清空 End If End SubPrivate Sub Cmd...

在VB中,如何调用API函数?
答:然后点确定 这时候再重新点一下外接程序 发现里面多了个API 浏览器 打开 点文件 加载文本文件 选中里面的win32API.txt 然后发现列表框里出现暴多的API 函数 选中你要的 然后把下面生成的代码复制 粘到你的vb程序代码里面 就完成了调用!吁~ 一口气 希望能看懂~...