FreeBasic
Главная
Вход
Регистрация
Пятница, 26.04.2024, 02:00Приветствую Вас Гость | RSS
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » Freebasic » Исходники » Пример вращения с помощью PlgBlt (Пример вращения с помощью PlgBlt)
Пример вращения с помощью PlgBlt
haavДата: Пятница, 15.06.2012, 07:11 | Сообщение # 1
Генералиссимус
Группа: Администраторы
Сообщений: 1361
Репутация: 49
Статус: 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
Прикрепления: 0658521.png (17.4 Kb)


Вы сохраняете власть над людьми покуда оставляете им что-то…Отберите у человека все, и этот человек уже будет неподвластен вам…
 
Форум » Freebasic » Исходники » Пример вращения с помощью PlgBlt (Пример вращения с помощью PlgBlt)
  • Страница 1 из 1
  • 1
Поиск: