delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1998/04/23/12:45:32

From: e-mail DOT address AT end DOT of DOT text (Mike Collins)
Newsgroups: comp.os.msdos.djgpp
Subject: Colours with Allegro
Date: 23 Apr 1998 12:12:40 GMT
Organization: Storage Technology Limited
Lines: 93
Message-ID: <6hnb7o$prn@news.network.com>
NNTP-Posting-Host: 129.80.172.119
Mime-Version: 1.0
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

/****************************************************************************
 Would somebody please compile this little program and explain to me what I'm
 doing wrong?

I want to make a coloured bar 256 pixels in length and 10 pixels
 high that goes :

 B......b.....bw.....w......W   (ie, going from black to white)

 ... where "B" is hard black, "b" is dark grey, "w" is light grey and "W" is
 hard white.

 I make a pallete of 256 colours from R,G,B=0,0,0 to R,G,B=255,255,255
 then I step through them making a bar 256 pixels long and expecting to see
 each x position progressively lighter than the previous, but what I get is:

 B.b.w.WB.b.w.WB.b.w.WB.b.w.W   (with four B..W colour bars with abrupt
                                 changes from white to black between them!)

 The final three putpixel() lines plot the values in the pallete array, which
 are all the same, of course. I did this because the results made me believe
 I had got them wrong.

 If you uncomment the #define SIN, the pallete is filled as plotted on the
 screen. It looks like a 3-phase diagram, one phase for each colour, and I
 expected that it would give a bar that varied in colour smoothly and
 continuously along its length, but what it gives is 12 short fading bars
 with abrupt changes between them.

 What am I missing?

 Please help me out and I'll be in a position to help others one day!

 Thanks,

 Mike.
****************************************************************************/

#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <allegro.h>

//#define SIN     // un-comment this line to vary colours independantly

int main()
{  int c, x, y;
   double d;
   BITMAP *bitmap;
   PALLETE pallete;

   allegro_init();
   install_keyboard(); 
   set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0);
#ifdef SIN
   set_pallete(desktop_pallete);

   for (c=0; c<256; c++)
   { d = (PI/128);    // (2 * PI / 256)
     pallete[c].r = (int)(128*(1+sin(c*d)));
     pallete[c].g = (int)(128*(1+sin((c+85)*d)));
     pallete[c].b = (int)(128*(1+sin((c+171)*d)));
   }
#else
   for (c=0; c<256; c++)    // set 256 shades of grey from black to white
   { pallete[c].r = c;
     pallete[c].g = c;
     pallete[c].b = c;
   }
#endif

   set_pallete(pallete);

   y=0;
   for(x=0; x<256; x++)
   { for(y=90; y<100; y++) // make a band of colour
       putpixel(screen, x, y, x);

     putpixel(screen, x, pallete[x].r, 255); // plot the value of the colour
     putpixel(screen, x, pallete[x].g, 255);
     putpixel(screen, x, pallete[x].b, 255);
   }

   readkey();
   return 0;
}

-- 
Don't just hit "reply" - my E-mail address is bogus
to avoid automatic browsers from sending junk mail.
Please use collim'at'anubis'dot'network'dot'com
Actually, even this doesn't stop all of them ...

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019