Tutorial: create a bitmap with a sunnyboy
=========================================

Create a bitmap with a sunnyboy in a subfunction,
show it and end the program.


step 1
At first we have to initialize VgaGames
and open a window or switch to graphical screen.

==>
int main(int argc, char ** argv) {
  char * arg0;  // for the name of the program
  bitmap * sunboy;  // for the created sunnyboy

  /* initialize vgagames, always pass argv[0] */
  if (vg_init_vgagames(argv[0],0,NULL) < 0) {exit(1);}

  /* open window */
  if ((arg0=strrchr(argv[0],'/'))==NULL) {arg0=argv[0];} else {arg0++;}
  if (vg_window_open(arg0,0,0) < 0) {exit(1);}
<== step 2 We create a green sunnyboy using the subfunction create_sunnyboy() ==>
  /* create a green sunnyboy */
  sunboy=create_sunnyboy(vg_color_index(CL_GREEN,100));
  if (sunboy==NULL) {  // error
    vg_window_close();
    exit(1);
  }
<== step 3 We copy the bitmap into the middle of the window in transparent mode to copy only the face, not the whole bitmap as a rectangle. ==>
  /* copy sunnyboy to window */
  {int x,y;
   // copy it to the middle of the window,
   // vg_bitmap_copyto() copies the middle of the sunnyboy
   // to the destination coordinates.
   x=SC_WIDTH/2;
   y=SC_HEIGHT/2;
   // we use RGB_TRANS to copy only the face, not the edges
   vg_bitmap_copyto(NULL,x,y,sunboy,0,0,0,0,RGB_TRANS);
  }
<== step 4 Now the rest of the main-function follows. ==>
  /* now flush window out to visible screen */
  vg_window_flush();

  /* wait 3 seconds */
  sleep(3);

  /* free bitmap */
  vg_bitmap_free(sunboy);

  /* close window */
  vg_window_close();

  exit(0);
}
<== step 5 Here at last comes the function to create the bitmap. We place it into a separate file create_sunnyboy.c ==>
/* function to return a created sunnyboy bitmap */

bitmap * create_sunnyboy(int color) {
  /* give back a bitmap with a sunnyboy */
  int x,y,r;
  bitmap * sunboy;
  r=10;  // radius of face of Sunnyboy

  /* create empty bitmap, large enough for sunnyboy */
  sunboy=vg_bitmap_createnew(r*2+1,r*2+1);
  if (sunboy==NULL) {return(NULL);}  // error

  /* get middle of bitmap */
  x=vg_bitmap_width(sunboy)/2;
  y=vg_bitmap_height(sunboy)/2;

  /* draw sunnyboy into the middle of the bitmap */
  vg_draw_circle(sunboy,x,y,r,RGB_WHITE,0);
  vg_draw_fillout(sunboy,x,y,color);
  // draw eyes, nose and mouth.
  // We use RGB_DARK instead of RGB_BLACK, because RGB_BLACK is not only
  // black but may also be considered as transparent pixel, which is not
  // drawn, if the bitmap is copied in transparent mode.
  // RGB_DARK is the next darkest pixel, which is always drawn.
  vg_draw_box(sunboy,x-4,y-4,2,2,RGB_DARK,0);
  vg_draw_box(sunboy,x+4,y-4,2,2,RGB_DARK,0);
  vg_draw_pixel(sunboy,x-1,y,RGB_DARK);
  vg_draw_pixel(sunboy,x+1,y,RGB_DARK);
  vg_draw_pixel(sunboy,x-4,y+3,RGB_DARK);
  vg_draw_pixel(sunboy,x+4,y+3,RGB_DARK);
  vg_draw_line(sunboy,x-3,y+4,x-2,y+4,RGB_DARK);
  vg_draw_line(sunboy,x+3,y+4,x+2,y+4,RGB_DARK);
  vg_draw_line(sunboy,x-1,y+5,x+1,y+5,RGB_DARK);

  return(sunboy);
}
<== The whole program tut-bitmap1.c create_sunnyboy.c
[Previous] - [Index] - [Next]