12.10.2015, 21:49
|
#1
|
ПроЭктировщик
Регистрация: 17.07.2009
Сообщений: 182
Написано 51 полезных сообщений (для 71 пользователей)
|
Вращение изображение со смещением
Код под спойлером :
Dim cosA#(3600000)
Dim sinA#(3600000)
; предварительное вычисление синуса и косинуса
For i# = 0 To 360 Step 0.0001
cosA(i#)= Cos(i#)
sinA(i#)= Sin(i#)
Next
;
Global grx,gry
Global mx#,my#
Graphics 800,600,32,2
;img = LoadImage ("ваше изображение.bmp") ; *jpg ...
img = CreateImage(21, 21)
SetBuffer ImageBuffer(img)
Rect 0, 0, 20, 20, 1
SetBuffer BackBuffer()
ClsColor 128,128,128
While Not KeyHit(1)
Cls
mx = MouseX() : my = MouseY()
mz# = mz# + 55.5
If mz > 359.9999 mz = 0
ImageRotate(mx, my, img, mz, 20)
DrawImage img,100,100
Flip
Wend
FreeImage img
End
;( offsetX ,offsetY - центр вращения )
Function ImageRotate#(Point_x#, Point_y#, imageSource, angle# = 0.0, offsetX# = 0, offsetY# = 0)
If imageSource = 0 Return
Local width = ImageWidth(imageSource ) , height = ImageHeight(imageSource )
Local bufferImage = ImageBuffer(imageSource ) ,background = BackBuffer()
angle# = Abs(angle)
LockBuffer bufferImage
LockBuffer background
For local_x# = 0 To width Step 0.4
For local_y# = 0 To height Step 0.4
pix = ReadPixelFast (local_x, local_y, bufferImage )
hwidth = width Shr 1
hheight = height Shr 1
xt# = local_x - hwidth + offsetX
yt# = local_y - hheight + offsetY
sinma# = SinA(angle)
cosma# = CosA(angle)
xs# = Point_x + ((cosma * xt - sinma * yt) )
ys# = Point_y + ((sinma * xt + cosma * yt) )
If xs >= 0 And xs < 800 And ys >= 0 And ys < 600 And pix <> $ff000000
WritePixelFast xs, ys, pix, background
EndIf
Next
Next
UnlockBuffer background
UnlockBuffer bufferImage
End Function
__________________
Мой проект здесь
|
(Offline)
|
|