⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bitmap.c

📁 [Game.Programming].Academic - Graphics Gems (6 books source code)
💻 C
字号:
/* * This software is copyrighted as noted below.  It may be freely copied, * modified, and redistributed, provided that the copyright notice is * preserved on all copies. * * There is no warranty or other guarantee of fitness for this software, * it is provided solely "as is".  Bug reports or fixes may be sent * to the author, who may or may not act on them as he desires. * * You may not include this software in a program or other software product * without supplying the source, or without informing the end-user that the * source is available for no extra charge. * * If you modify this software, you should include a notice giving the * name of the person performing the modification, the date of modification, * and the reason for such modification. *//* * bitmap.c - manage bitmap memory 'problems'. * * Author:      Raul Rivero *              Mathematics Dept. *              University of Oviedo * Date:        Sat Jan 4 1992 * Copyright (c) 1992, Raul Rivero * */#include "lug.h"#include "lugfnts.h"allocatebitmap(image, xsize, ysize, depth, colors)bitmap_hdr *image;int xsize, ysize, depth, colors;{  int totalsize;  if ( image->magic == LUGUSED )    freebitmap( image );  if ( (totalsize = xsize * ysize) <= 0 )    error( 12 );           /* an error, a negative size ? */  /* Fill sizes */  image->xsize = xsize;  image->ysize = ysize;  image->magic = LUGUSED;  /*   * If colors are equal to 0 then the real information   * are stored on detph;   */  if ( colors == 0 ) {    image->depth = depth;    image->colors = ( 1 << image->depth );  }else {    image->colors = colors;    image->depth = no_bits( colors ) + 1;  }  image->r = (byte *) Malloc( totalsize );  switch ( image->depth ) {    case  8: image->cmap = (byte *) Malloc( 3 * image->colors );             break;    case 24: image->g = (byte *) Malloc( totalsize );             image->b = (byte *) Malloc( totalsize );             break;    default: return 1;          /* an error, unkown depth */  }  return 0;}freebitmap(image)bitmap_hdr *image;{  if ( image->magic != LUGUSED )    return 0;  image->magic = -LUGUSED;  switch ( image->depth ) {    case 32:    /* for the future */    case 24:        free( image->r );        free( image->g );        free( image->b );        break;    default:        if ( image->depth <= 8 ) {          free( image->r );          free( image->cmap );        }else {          /* Unknown depth */          error( 10 );        }        break;  }  return 0;}copy_bitmap( inbitmap, outbitmap)bitmap_hdr *inbitmap, *outbitmap;{  int totalsize = inbitmap->xsize * inbitmap->ysize;  if ( outbitmap->magic == LUGUSED )    freebitmap( outbitmap );  if ( inbitmap->magic != LUGUSED )    error( 19 );  /*   * Fill header.   */  outbitmap->magic = LUGUSED;  outbitmap->xsize = inbitmap->xsize;  outbitmap->ysize = inbitmap->ysize;  outbitmap->depth = inbitmap->depth;  outbitmap->colors = inbitmap->colors;  /*   * Copy raster information.   */  outbitmap->r = (byte *) Malloc( totalsize );  bcopy( inbitmap->r, outbitmap->r, totalsize );  if ( outbitmap->depth > 8 ) {    outbitmap->g = (byte *) Malloc( totalsize );    bcopy( inbitmap->g, outbitmap->g, totalsize );    outbitmap->b = (byte *) Malloc( totalsize );    bcopy( inbitmap->b, outbitmap->b, totalsize );  }else {    outbitmap->cmap = (byte *) Malloc( 3 * outbitmap->colors );    bcopy( inbitmap->cmap, outbitmap->cmap, 3*outbitmap->colors );  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -