haav | Дата: Пятница, 15.06.2012, 07:11 | Сообщение # 1 |
Генералиссимус
Группа: Администраторы
Сообщений: 1373
Статус: Offline
| Пример вращения с помощью PlgBlt
Данный пример я писал по просьбе одного из участников английского форума. По своей сути в этом примере нет ничего примечательного, тем более что в библиотеке window9 есть встроенная возможность вращения изображений. Данный исходник я не буду выкладывать на своем основном сайте, ему место здесь.
Code #Include "window9.bi"
#Ifndef PI #define PI 3.14159265358979323846 #EndIf
Declare Sub DrawRotated(DC As HDC, Bitmap As HBITMAP, X As Integer, Y As Integer ,width_ As Integer, height As Integer, Angle As Single ) Declare Sub timerRotate() Dim Shared As HBITMAP bmp Dim Shared As hwnd hwnd Dim Shared angle As Single hwnd =OpenWindow("Draw",100,100,320,240) bmp=Create_Image(50,50) Var hdc = ImageStartDraw(bmp) BoxDraw(10,10,30,30,255,255) StopDraw
SetTimer(hwnd,1,1,Cast(TIMERPROC,@timerRotate())) Do : Loop Until WaitEvent=EventClose
Sub timerRotate() Var hdc = WindowStartDraw(hwnd) FillRectDraw( 10 , 10 ,&hf0f0f0 ) angle+=5 DrawRotated(hdc,bmp,130,70,50,50,angle) ImageDraw(bmp,100,60,150) ImageDraw(bmp,150,60,240) StopDraw End Sub Sub DrawRotated(DC As HDC, Bitmap As HBITMAP, X As Integer, Y As Integer ,width_ As Integer, height As Integer, Angle As Single ) Dim As HDC TempDC Dim As SIZE BmpSize Dim As Single Radians Dim As Point Points(0 To 2) Dim As Integer Xc, Yc
TempDC = CreateCompatibleDC(DC) SelectObject(TempDC, Bitmap)
BmpSize.cx=width_ BmpSize.cy=height Radians = Angle * Pi / 180
With BmpSize 'find center. Xc = X + (.cX \ 2) Yc = Y + (.cY \ 2) 'calc. Points(0).X = (X - Xc) * Cos(Radians) - (Y - Yc) * Sin(Radians) + Xc Points(0).Y = (Y - Yc) * Cos(Radians) + (X - Xc) * Sin(Radians) + Yc
Points(1).X = (X + .cX - Xc) * Cos(Radians) - (Y - Yc) * Sin(Radians) + Xc Points(1).Y = (Y - Yc) * Cos(Radians) + (X + .cX - Xc) * Sin(Radians) + Yc
Points(2).X = (X - Xc) * Cos(Radians) - (Y + .cY - Yc) * Sin(Radians) + Xc Points(2).Y = (Y + .cY - Yc) * Cos(Radians) + (X - Xc) * Sin(Radians) + Yc
'draw. PlgBlt(DC, @Points(0), TempDC, 0, 0, .cX, .cY, 0, 0, 0) DeleteDC(TempDC) End With End Sub
Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
|
|
| |