Found on a german VB-Website: http://www.vbarchiv.net/tipps/details.php?id=938
Code:
Private Const pi = 3.14159265359
Public Sub RotatePicture(ByVal picSource As PictureBox, ByVal picDest As PictureBox, Optional ByVal Angle As Long = 0)
' cp0 - cp3 = Color of single Pixel
Dim cp0 As Long, cp1 As Long
Dim cp2 As Long, cp3 As Long
' Picture-Dimensions
Dim w1 As Long, h1 As Long
Dim w2 As Long, h2 As Long
Dim p1x As Double, p1y As Double
Dim p2x As Double, p2y As Double
Dim n As Double, r As Double, a As Double
picSource.AutoSize = True
picSource.Visible = False
picSource.AutoRedraw = True
picDest.AutoRedraw = True
picSource.ScaleMode = vbPixels
picDest.ScaleMode = vbPixels
Set picDest.Picture = Nothing
picDest.Cls
w1 = picSource.ScaleWidth \ 2
h1 = picSource.ScaleHeight \ 2
w2 = picDest.ScaleWidth \ 2
h2 = picDest.ScaleHeight \ 2
' Angle = pi * (Angle / 180)
If w2 < h2 Then n = h2 Else n = w2
n = n - 1
For p2x = 0 To n
For p2y = 0 To n
' Calculate Position
If p2x = 0 Then a = pi / 2 Else a = Atn(p2y / p2x)
r = Sqr(p2x * p2x + p2y * p2y)
p1x = r * Cos(a + (pi * Angle / 180))
p1y = r * Sin(a + (pi * Angle / 180))
cp0 = picSource.Point(w1 + p1x, h1 + p1y)
cp1 = picSource.Point(w1 - p1x, h1 - p1y)
cp2 = picSource.Point(w1 + p1y, h1 - p1x)
cp3 = picSource.Point(w1 - p1y, h1 + p1x)
If cp0 <> -1 Then picDest.PSet (w2 + p2x, h2 + p2y), cp0
If cp1 <> -1 Then picDest.PSet (w2 - p2x, h2 - p2y), cp1
If cp2 <> -1 Then picDest.PSet (w2 + p2y, h2 - p2x), cp2
If cp3 <> -1 Then picDest.PSet (w2 - p2y, h2 + p2x), cp3
Next p2y
Next p2x
Set picDest.Picture = picDest.Image
End Sub
Not tested!