&&
------------------------------------------------------------------------------
               CURSUS AMIGABASIC  -  SUBROUTINES  -  RGB-Range
------------------------------------------------------------------------------

Deze routine kunt u gebruiken om kleuren mooi over te laten lopen. U geeft
twee kleuren op en de routine laat de kleuren daartussen geleidelijk over-
lopen. Het beste resultaat krijgt u natuurlijk op een scherm met veel kleuren.

Het programma is als een SUB geschreven en heeft 2 parameters nodig. Hieronder
staat de sub met een demo waar kleuren worden aangepast.

SYNTAX :

CALL RGBRange (n%,m%)

n% = De startkleur.
m% = De eindkleur.

Er zijn twee libraries nodig, en dus ook twee BMap-files.

VOORBEELD :

   DECLARE FUNCTION viewportaddress& LIBRARY
   DECLARE FUNCTION getrgb4& LIBRARY
   LIBRARY "graphics.library"
   LIBRARY "intuition.library"
&&
   REM Demo
   LINE (50,50)-(100,100),1,bf                :REM Vlak in kleur 1.
   LINE (100,50)-(150,100),2,bf               :REM Vlak in kleur 2.
   LINE (150,50)-(200,100),3,bf               :REM Vlak in kleur 3.
   FOR I=1 TO 5000 : NEXT I                   :REM Even wachten.
   n%=1                                       :REM Startkleur is 1.
   m%=3                                       :REM Eindkleur is 3.
   CALL RGBRange (n%,m%)                      :REM De routine.
   END                                        :REM Einde demo.

DE EIGENLIJKE SUB :

   SUB RGBRange (n%,m%) STATIC

We moeten testen of de opgegeven kleuren niet negatief zijn en niet groter dan
het aantal kleuren dat het scherm heeft.

       IF n%<0 OR n%>WINDOW(6) THEN EXIT SUB
       IF m%<0 OR m%>WINDOW(6) THEN EXIT SUB 

Als we de laatste kleur per ongeluk als eerste hebben opgegeven moeten we deze
even omdraaien.

       IF m%<n% THEN SWAP m%,n%
&&
Om de kleuren te kunnen vinden moeten we de kleuren-map van het scherm zien te
vinden. Deze vinden we met een ingewikkelde PEEK in het geheugen.

       cm&=PEEKL(viewportaddress&(WINDOW(7))+4)

Nu kunnen we de routine GETRGB4 gebruiken om de kleuren op te zoeken. Deze ko-
men als 2 bytes met als hex-waarde 0XXX. De drie X-en staan voor de waardes
Rood, Groen en Blauw. We moeten die uit de bytes halen met wat kommando's.

       rgb=getrgb4&(cm&,n%)                   :REM Pak de kleuren.
       r1%=INT(rgb/2^8)                       :REM De ROOD-waarde.
       rgb=rgb MOD 2^8
       g1%=INT(rgb/2^4)                       :REM De GROEN-waarde.
       b1%=rgb MOD 2^4                        :REM De BLAUW-waarde.

Dit moeten we natuurlijk herhalen voor de tweede kleur.

       rgb=getrgb4&(cm&,m%)
       r2%=INT(rgb/2^8)
       rgb=rgb MOD 2^8
       g2%=INT(rgb/2^4)
       b2%=rgb MOD 2^4
&&
Nu rekenen we de stapjes uit die nodig zijn om de kleuren over te laten lopen.

       rs=(r2%-r1%)/(m%-n%)                   :REM De ROOD-stap.
       gs=(g2%-g1%)/(m%-n%)                   :REM De GROEN-stap.
       bs=(b2%-b1%)/(m%-n%)                   :REM De BLAUW-stap.
       wr=0                                   :REM De start-waardes.
       wg=0
       wb=0

En dan als laatste moeten we de verschillende kleuren aanpassen.

       FOR z=n% TO m%
           PALETTE z,(r1%+wr)/15,(g1%+wg)/15,(b1%+wb)/15
           wr=wr+rs
           wg=wg+gs
           wb=wb+bs
       NEXT z
   END SUB







Het programma staat op diskette onder de naam RGBRange in de Basic-directory.

- EINDE ----------------------------------------------------------------------
&&
