Tutorial: rotated and zoomed bitmap
===================================

Create a bitmap with a sunnyboy, rotate and zoom it,
give it and the original out, then 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
  bitmap * sunboy2; // for the modified 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 rotate the sunnyboy at 180 degrees and zoom it twice as big. Then we duplicate the modified sunnyboy, because it is a only a pointer to a static bitmap. ==>
  /* rotate sunnyboy at 180 degrees and zoom it twice as big.
     Because both functions return a static bitmap, we can
     chain them. The original sunboy is not touched.
  */
  sunboy2=vg_bitmap_zoom(vg_bitmap_rotate(sunboy,180), 2.0, 2.0);
  if (sunboy2==NULL) {  // error
    vg_window_close();
    exit(1);
  }
  // now we want to duplicate this static bitmap, because it will be
  // modified at the next call to vg_bitmap_rotate() or vg_bitmap_zoom()
  sunboy2=vg_bitmap_duplicate(sunboy2);
  if (sunboy2==NULL) {  // error
    vg_window_close();
    exit(1);
  }
<== step 4 We give both sunnyboys out and do the rest. ==>
  /* give out the original sunnyboy and the modified one */
  vg_bitmap_copyto(NULL,SC_WIDTH/2,SC_HEIGHT/3,sunboy,0,0,0,0,RGB_TRANS);
  vg_bitmap_copyto(NULL,SC_WIDTH/2,SC_HEIGHT*2/3,sunboy2,0,0,0,0,RGB_TRANS);

  /* now flush window out to visible screen */
  vg_window_flush();

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

  /* free both sunnyboys */
  vg_bitmap_free(sunboy);
  vg_bitmap_free(sunboy2);  // free it, because it was duplicated

  /* close window */
  vg_window_close();

  exit(0);
}
<== The whole program tut-bitmap4.c create_sunnyboy.c
[Previous] - [Index] - [Next]