Code archives/Graphics/Blender

This code has not been declared by its author to be Public Domain code, and therefore should not be assumed to be so.

Download source code

Blender by Unknown
(Posted 25 years ago)
3 different codes for blending/fading!

its fast - but use it inside a buffer

Warning: dont use FLIP - The functions do all what you need...

-BlackBlender (for black backgrounds)
-WhiteBlender (for white backgrounds)
-GrayBlender (converts color-gray)

mode=(0 or 1 = fade in/out)
time=time in msec

WWW.BLITZBASE.DE
;Example
GRAPHICS 640,480,0,1
b1=LOADIMAGE("1.bmp")
b2=LOADIMAGE("2.bmp")
b3=LOADIMAGE("3.bmp")

BlackBlender b1,170,190,0,3000
DELAY 1000
BlackBlender b1,170,190,1,1500
BlackBlender b2,170,190,0,3000
DELAY 1000
BlackBlender b2,170,190,1,1500
BlackBlender b3,170,190,0,3000
WAITKEY()
BlackBlender b3,170,190,1,1500
END

;-------------------------------------------------
FUNCTION BlackBlender(Image, X, Y, Mode, Time)
   Source=IMAGEBUFFER(Image)
   Dest=FRONTBUFFER()
   MaxX=IMAGEWIDTH(Image)-1
   MaxY=IMAGEHEIGHT(Image)-1
   Start=MILLISECS()
   LOCKBUFFER Source
   LOCKBUFFER Dest
   WHILE MILLISECS()-Start<Time
      Count=(Count+1) MOD 4
      IF Count=0 THEN MinX=0: MinY=0
      IF Count=1 THEN MinX=1: MinY=1
      IF Count=2 THEN MinX=1: MinY=0
      IF Count=3 THEN MinX=0: MinY=1
      IF Mode=0 THEN Value=MILLISECS()-Start
      IF Mode=1 THEN Value=Time-MILLISECS()+Start
      FOR ii=MinY TO MaxY STEP 2
         FOR i=MinX TO MaxX STEP 2
            rgb=READPIXELFAST(i,ii,Source)
            r=(rgb AND $FF0000)/$10000
            g=(rgb AND $FF00)/$100
            b=rgb AND $FF
            rgb=r*Value/Time*65536 + g*Value/Time*256 + b*Value/Time
            WRITEPIXELFAST X+i,Y+ii,rgb,Dest
         NEXT
      NEXT
   WEND
   UNLOCKBUFFER Source
   UNLOCKBUFFER Dest
   IF Mode=0 THEN DRAWBLOCK Image,X,Y
   IF Mode=1 THEN COLOR 0,0,0: RECT X,Y,MaxX+1,MaxY+1
END FUNCTION

;-------------------------------------------------
FUNCTION WhiteBlender(Image, X, Y, Mode, Time)
   Source=IMAGEBUFFER(Image)
   Dest=FRONTBUFFER()
   MaxX=IMAGEWIDTH(Image)-1
   MaxY=IMAGEHEIGHT(Image)-1
   Start=MILLISECS()
   LOCKBUFFER Source
   LOCKBUFFER Dest
   WHILE MILLISECS()-Start<Time
      Count=(Count+1) MOD 4
      IF Count=0 THEN MinX=0: MinY=0
      IF Count=1 THEN MinX=1: MinY=1
      IF Count=2 THEN MinX=1: MinY=0
      IF Count=3 THEN MinX=0: MinY=1
      IF Mode=0 THEN Value=Time-MILLISECS()+Start
      IF Mode=1 THEN Value=MILLISECS()-Start
      FOR ii=MinY TO MaxY STEP 2
         FOR i=MinX TO MaxX STEP 2
            rgb=READPIXELFAST(i,ii,Source)
            r=(rgb AND $FF0000)/$10000
            g=(rgb AND $FF00)/$100
            b=rgb AND $FF
            m=(r+g+b)/3
            rgb=((255-r)*Value/Time+r)*65536 + ((255-g)*Value/Time+g)*256 + ((255-b)*Value/Time+b)
            WRITEPIXELFAST X+i,Y+ii,rgb,Dest
         NEXT
      NEXT
   WEND
   UNLOCKBUFFER Source
   UNLOCKBUFFER Dest
   IF Mode=0 THEN DRAWBLOCK Image,X,Y
   IF Mode=1 THEN COLOR 255,255,255: RECT X,Y,MaxX+1,MaxY+1
END FUNCTION

;-------------------------------------------------
FUNCTION GrayBlender(Image, X, Y, Mode, Time)
   Source=IMAGEBUFFER(Image)
   Dest=FRONTBUFFER()
   MaxX=IMAGEWIDTH(Image)-1
   MaxY=IMAGEHEIGHT(Image)-1
   Start=MILLISECS()
   LOCKBUFFER Source
   LOCKBUFFER Dest
   WHILE MILLISECS()-Start<Time
      Count=(Count+1) MOD 4
      IF Count=0 THEN MinX=0: MinY=0
      IF Count=1 THEN MinX=1: MinY=1
      IF Count=2 THEN MinX=1: MinY=0
      IF Count=3 THEN MinX=0: MinY=1
      IF Mode=0 THEN Value=Time-MILLISECS()+Start
      IF Mode=1 THEN Value=MILLISECS()-Start
      FOR ii=MinY TO MaxY STEP 2
         FOR i=MinX TO MaxX STEP 2
            rgb=READPIXELFAST(i,ii,Source)
            r=(rgb AND $FF0000)/$10000
            g=(rgb AND $FF00)/$100
            b=rgb AND $FF
            m=(r+g+b)/3
            rgb=((m-r)*Value/Time+r)*65536 + ((m-g)*Value/Time+g)*256 + ((m-b)*Value/Time+b)
            WRITEPIXELFAST X+i,Y+ii,rgb,Dest
         NEXT
      NEXT
   WEND
   UNLOCKBUFFER Source
   UNLOCKBUFFER Dest
   IF Mode=0 THEN DRAWBLOCK Image,X,Y
END FUNCTION

Comments

None.

Code Archives Forum