Code archives/Graphics/2D Image Transition
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
| A warning - this is one of the first Programs I wrote in Blitz. There might be better Solutions. Especially when you own Blitz3D it is 100 times faster to use the 2 Pictures as Textures on alpha-transparent Meshes and crossfade them using EntityAlpha(). However, I let this code here as long as we have enough Space. | |||||
; This Prog will fade from one Picture to an other one and back in 2D.
; Don't forget to turn off the Debugger.
Graphics 640,480
SetBuffer BackBuffer()
bild1=LoadImage("s1.jpg") ; use 2 Pictures with 640*480 Pixels
bild2=LoadImage("s3.jpg")
bild_op=CreateImage(640,1440)
VWait 10
SetBuffer ImageBuffer(bild_op)
DrawImage bild1,0,0
DrawImage bild1,0,480
DrawImage bild2,0,960
SetBuffer BackBuffer()
DrawImage bild_op,0,0
bmax=15
; mainloop
While a<>27
a=GetKey()
Gosub myfader12
Gosub myfader21
Wend
End
.myfader12
For b=0 To bmax
SetBuffer ImageBuffer(bild_op):LockBuffer:fx=0:fy=0:Gosub zeichne:UnlockBuffer:SetBuffer BackBuffer():DrawImage bild_op,0,0:Flip
SetBuffer ImageBuffer(bild_op):LockBuffer:fx=1:fy=0:Gosub zeichne:UnlockBuffer:SetBuffer BackBuffer():DrawImage bild_op,0,0:Flip
SetBuffer ImageBuffer(bild_op):LockBuffer:fx=0:fy=1:Gosub zeichne:UnlockBuffer:SetBuffer BackBuffer():DrawImage bild_op,0,0:Flip
SetBuffer ImageBuffer(bild_op):LockBuffer:fx=1:fy=1:Gosub zeichne:UnlockBuffer:SetBuffer BackBuffer():DrawImage bild_op,0,0:Flip
If KeyHit(1) Then Exit
Next
Return
.myfader21
For b=bmax To 0 Step -1
SetBuffer ImageBuffer(bild_op):LockBuffer:fx=0:fy=0:Gosub zeichne:UnlockBuffer:SetBuffer BackBuffer():DrawImage bild_op,0,0:Flip
SetBuffer ImageBuffer(bild_op):LockBuffer:fx=1:fy=0:Gosub zeichne:UnlockBuffer:SetBuffer BackBuffer():DrawImage bild_op,0,0:Flip
SetBuffer ImageBuffer(bild_op):LockBuffer:fx=0:fy=1:Gosub zeichne:UnlockBuffer:SetBuffer BackBuffer():DrawImage bild_op,0,0:Flip
SetBuffer ImageBuffer(bild_op):LockBuffer:fx=1:fy=1:Gosub zeichne:UnlockBuffer:SetBuffer BackBuffer():DrawImage bild_op,0,0:Flip
If KeyHit(1) Then Exit
Next
Return
.zeichne
For y = 0 To 479 Step 2
For x = 0 To 639 Step 2
f1=ReadPixelFast(x+fx,y+480+fy) And $ffffff
f1r=f1 And $ff0000
f1g=f1 And $ff00
f1b=f1 And $ff
f2=ReadPixelFast(x+fx,y+960+fy) And $ffffff
f2r=f2 And $ff0000
f2g=f2 And $ff00
f2b=f2 And $ff
b2#=b
bma#=bmax
bbm#=b2#/bma#
b2m#=(bma#-b2#)/bma#
f3r=((f2r*bbm#)+(f1r*b2m#)) And $ff0000
f3g=((f2g*bbm#)+(f1g*b2m#)) And $ff00
f3b=((f2b*bbm#)+(f1b*b2m#)) And $ff
f3=f3r Or f3g Or f3b
WritePixelFast x+fx,y+fy,f3
Next
Next
Return |
Comments
None.
Code Archives Forum