TFormImage image,a#,b#,c#,d#

Параметры

image - указатель изображения
a# - 1,1 элемент матрицы 2x2
b# - 2,1 элемент матрицы 2x2
c# - 1,2 элемент матрицы 2x2
d# - 2,2 элемент матрицы 2x2

Описание

Команда выполняет преобразование изображения, основанное на матрице с размерностью 2x2. В параметрах задаются элементы матрицы, как показано ниже:
( a# b# )
( c# d# )

Изображение обрабатывается как матрица и умножено на вышеуказанную выше матрицу. Если Вы не понимаете действий с матрицами полностью, маловероятно, что Вы найдете эту команду полезной.

Общие применения для этой команды могут быть такие, как вращение или масштабирование изображения. Они доступны независимо от использования команд ScaleImage и RotateImage. Однако, используя эту команду, возможно сделать обе операции одновременно. Также возможно обрезать изображения с использованием этой команды.

Строго рекомендуется, чтобы Вы выполнили пример, показанный ниже (довольно длинный), чтобы лучше понять, как эта команда может использоваться.

Смотрите также : ScaleImage, RotateImage.

Пример

; Set up the Blitz evironment and user controlled input parameters
Global a#=1 ; This controls the horizontal scale, negative values cause the image to flip. Zero is invalid.
Global b#=0 ; This shears the image vertically
Global c#=0 ; This shears the image horizontally
Global d#=1 ; This controls the vertical scale, negative values cause the image to flip. Zero is invalid.
Graphics 600,400,16

; Create an image that we can manipulate
Global img=CreateImage(50,50)
SetBuffer ImageBuffer(img)
Color 255,0,0 : Rect 0,0,25,25,1
Color 255,255,0 : Rect 25,25,25,25,1
Color 0,255,0 : Rect 25,0,25,25,1
Color 0,0,255 : Rect 0,25,25,25,1

; Set up drawing & timing stuff
SetBuffer BackBuffer()
timer=CreateTimer(30)

Repeat
; deal with keyboard inputs
If KeyDown(42) Or KeyDown(54) Then inc#=-0.1 Else inc#=0.1
If KeyDown(30) Then a#=a#+inc#
If KeyDown(48) Then b#=b#+inc#
If KeyDown(46) Then c#=c#+inc#
If KeyDown(32) Then d#=d#+inc#
If KeyHit(57) Then RunDemo()
If KeyHit(1) Then Exit

; draw the screen
DrawScreen()
WaitTimer timer
Forever
End

; Rolling Demo
Function RunDemo()
degrees=0 ; the number of degrees by which to rotate the image
scale#=1.0 ; the scale of the image
timer=CreateTimer(10)
Repeat
a#=scale#:b#=0:c#=0:d#=scale# ; reset the matrix
; increase the degrees (or reset if >360)
If degrees<360 Then degrees=degrees+4 Else degrees=0
; and set up the matrix multipliers. The explanation as to why these work can be found in most good
; mathematics text books, and is too involved to go into here!
ma#=Cos(degrees)
mb#=Sin(degrees)
mc#=-Sin(degrees)
md#=Cos(degrees)
; multiply the two matrices.
na#=a#*ma#+b#*mc#
nb#=a#*mb#+b#*md#
nc#=c#*ma#+d#*mc#
nd#=c#*mb#+d#*md#
a#=na#:b#=nb#:c#=nc#:d#=nd#

; handle input and draw the screen
If KeyHit(1) Then Exit
If KeyDown(200) And scale#<2.0 Then scale#=scale#+0.1
If KeyDown(208) And scale#>0.1 Then scale#=scale#-0.1
DrawScreen(True)
WaitTimer timer
Forever
a#=1:b#=0:c#=0:d#=1 ; reset the matrix
FlushKeys()
End Function

; Draw stuff on the screen, including transforming the image
Function DrawScreen(demo=False)
ClsColor 0,0,0
Cls
DrawBlock img,10,10
Text 100,5,"TFORMIMAGE EXAMPLE"
Text 100,20,"The command format is: TFormImage image, a, b, c, d"
If Not demo Then
Text 100,35,"Press 'Space' for a rolling demo"
Text 100,50,"Use the keys a, b, c, and d to increase the parameters"
Text 100,65,"Also hold down shift to decrease each of these parameters"
Else
Text 100,35,"Use the up and down arrow keys to change the scale"
End If
Text 100,80,"Press 'Escape' to exit"
Text 10,110,"Current Parameters:"

; ######################## This is where we actually use TFormImage using the input parameters
Text 20,125,"TFormImage image, "+a#+", "+b#+", "+c#+", "+d#
img2=CopyImage(img)
TFormImage img2,a#,b#,c#,d#
; #############################################################################

If demo Then
DrawBlock img2,300,280
Else
DrawBlock img2,300-ImageWidth(img2)/2,280-ImageHeight(img2)/2
EndIf
Flip
End Function

Главная страница

Нажмите сюда, чтобы увидеть последнюю версию этой страницы в Интернете