'任意の角度に画像を回転する
'DestPicture :転送先のHDC(例:Picture1.hDC)
'SrcPicture :転送元HDC
'PictureWidth :横幅
'PictureHeight :縦幅
'Angle :角度

Public Sub Rotate _
  (DestPicture As Long, _
  SrcPicture As Long, _
  PictureWidth As Long, _
  PictureHeight As Long, _
  Angle As Integer)

  Dim i As Integer, j As Integer
  Dim x As Single, y As Single '処理するピクセル位置(転送先)
  Dim x_2 As Single, y_2 As Single '処理するピクセル位置(転送元)
  Dim x_3 As Single, y_3 As Single
  Dim x_temp As Single, y_temp As Single
  Dim x_temp2 As Single, y_temp2 As Single
  Dim Center As Single: Center = PictureWidth / 2

  x = ((0 - Center) * Cos(Pi * Angle) - (0 - Center) * Sin(Pi * Angle))
  y = ((0 - Center) * Sin(Pi * Angle) + (0 - Center) * Cos(Pi * Angle))

  x_temp = ((1 - Center) * Cos(Pi * Angle) - (0 - Center) * Sin(Pi * Angle))
  y_temp = ((1 - Center) * Sin(Pi * Angle) + (0 - Center) * Cos(Pi * Angle))
  x_temp2 = ((0 - Center) * Cos(Pi * Angle) - (1 - Center) * Sin(Pi * Angle))
  y_temp2 = ((0 - Center) * Sin(Pi * Angle) + (1 - Center) * Cos(Pi * Angle))

  x_temp = x_temp - x
  y_temp = y_temp - y
  x_temp2 = x_temp2 - x
  y_temp2 = y_temp2 - y

  For j = 0 To PictureHeight
    x_2 = x_temp2 * j + x
    y_2 = y_temp2 * j + y
    For i = 0 To PictureWidth
      x_3 = x_temp * i + x_2 + Center
      y_3 = y_temp * i + y_2 + Center
      Call BitBlt(DestPicture, i, j, 1, 1, SrcPicture, x_3, y_3, SRCCOPY)
    Next
  Next
End Sub