How to Rotate a Bitmap in VB for Windows

ID Number: Q80406

1.00

WINDOWS

Summary:

This article contains a program example that uses Visual Basic

statements and functions to rotate a bitmap.

This information applies to Microsoft Visual Basic programming system

version 1.0 for Windows.

More Information:

Steps to Create Example Program

-------------------------------

1. Run Visual Basic, or from the File menu, choose New Project (ALT,

F, N) if Visual Basic is already running. Form1 will be created by

default.

2. Place two picture boxes named Picture1 and Picture2 on Form1.

3. Set the ScaleMode property of both picture boxes to 3 - Pixel.

4. Set the AutoSize property of Picture1 to True (-1).

5. Set the AutoRedraw property of Picture2 to True (-1).

6. Place a command button named Command1 on Form1.

7. Enter the following code in the Command1_Click event procedure:

' Example of how to call bmp_rotate.

Sub Command1_Click ()

Const Pi = 3.14159265359

For angle = Pi / 6 To 2 * Pi Step Pi / 6

picture2.Cls

Call bmp_rotate(picture1, picture2, angle)

Next

End Sub

8. Enter the following code in the general Declarations section:

' bmp_rotate(pic1, pic2, theta)

' Rotate the image in a picture box.

' pic1 is the picture box with the bitmap to rotate

' pic2 is the picture box to receive the rotated bitmap

' theta is the angle of rotation

'

Sub bmp_rotate (pic1 As Control, pic2 As Control, theta!)

Const Pi = 3.14159265359

Dim c1x As Integer ' center of pic1

Dim c1y As Integer ' "

Dim c2x As Integer ' center of pic2

Dim c2y As Integer ' "

Dim a As Single ' angle of c2 to p2

Dim r As Integer ' radius from c2 to p2

Dim p1x As Integer ' position on pic1

Dim p1y As Integer ' "

Dim p2x As Integer ' position on pic2

Dim p2y As Integer ' "

Dim n As Integer ' max width or height of pic2

' compute the centers

c1x = pic1.scalewidth / 2

c1y = pic1.scaleheight / 2

c2x = pic2.scalewidth / 2

c2y = pic2.scaleheight / 2

' compute the image size

n = pic2.scalewidth

If n < pic2.scaleheight Then n = pic2.scaleheight

n = n / 2 - 1

' for each pixel position on pic2

For p2x = 0 To n

For p2y = 0 To n

' compute polar coordinate of p2

If p2x = 0 Then

a = Pi / 2

Else

a = Atn(p2y / p2x)

End If

r = Sqr(1& * p2x * p2x + 1& * p2y * p2y)

' compute rotated position p1

p1x = r * Cos(a + theta)

p1y = r * Sin(a + theta)

' copy pixels, 4 quadrants at once

c0& = pic1.Point(c1x + p1x, c1y + p1y)

c1& = pic1.Point(c1x - p1x, c1y - p1y)

c2& = pic1.Point(c1x + p1y, c1y - p1x)

c3& = pic1.Point(c1x - p1y, c1y + p1x)

If c0& <> -1 Then pic2.PSet (c2x + p2x, c2y + p2y),c0&

If c1& <> -1 Then pic2.PSet (c2x - p2x, c2y - p2y),c1&

If c2& <> -1 Then pic2.PSet (c2x + p2y, c2y - p2x),c2&

If c3& <> -1 Then pic2.PSet (c2x - p2y, c2y + p2x),c3&

Next

' Allow pending Windows messages to be processed

t% = DoEvents()

Next

End Sub

9. Assign a bitmap image to the Picture1 Picture property.

10. To start the program, press F5, then click on Command1. The

program rotates the image of Picture1 by 30 degrees and places the

rotated image in Picture2. It continues to draw the image rotated

at successive multiples of 30 degrees until it has rotated the

picture by 360 degrees.

To save the new bitmap created in Picture2, you can use the following

statement:

SavePicture Picture2.Image, "filename.bmp"

Additional reference words: 1.00