Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed

  1. #include "fitz.h"
  2.  
  3. fz_bitmap *
  4. fz_new_bitmap(int w, int h, int n)
  5. {
  6.         fz_bitmap *bit;
  7.  
  8.         bit = fz_malloc(sizeof(fz_bitmap));
  9.         bit->refs = 1;
  10.         bit->w = w;
  11.         bit->h = h;
  12.         bit->n = n;
  13.         /* Span is 32 bit aligned. We may want to make this 64 bit if we
  14.          * use SSE2 etc. */
  15.         bit->stride = ((n * w + 31) & ~31) >> 3;
  16.  
  17.         bit->samples = fz_calloc(h, bit->stride);
  18.  
  19.         return bit;
  20. }
  21.  
  22. fz_bitmap *
  23. fz_keep_bitmap(fz_bitmap *pix)
  24. {
  25.         pix->refs++;
  26.         return pix;
  27. }
  28.  
  29. void
  30. fz_drop_bitmap(fz_bitmap *bit)
  31. {
  32.         if (bit && --bit->refs == 0)
  33.         {
  34.                 fz_free(bit->samples);
  35.                 fz_free(bit);
  36.         }
  37. }
  38.  
  39. void
  40. fz_clear_bitmap(fz_bitmap *bit)
  41. {
  42.         memset(bit->samples, 0, bit->stride * bit->h);
  43. }
  44.  
  45. /*
  46.  * Write bitmap to PBM file
  47.  */
  48.  
  49. fz_error
  50. fz_write_pbm(fz_bitmap *bitmap, char *filename)
  51. {
  52.         FILE *fp;
  53.         unsigned char *p;
  54.         int h, bytestride;
  55.  
  56.         fp = fopen(filename, "wb");
  57.         if (!fp)
  58.                 return fz_throw("cannot open file '%s': %s", filename, strerror(errno));
  59.  
  60.         assert(bitmap->n == 1);
  61.  
  62.         fprintf(fp, "P4\n%d %d\n", bitmap->w, bitmap->h);
  63.  
  64.         p = bitmap->samples;
  65.  
  66.         h = bitmap->h;
  67.         bytestride = (bitmap->w + 7) >> 3;
  68.         while (h--)
  69.         {
  70.                 fwrite(p, 1, bytestride, fp);
  71.                 p += bitmap->stride;
  72.         }
  73.  
  74.         fclose(fp);
  75.         return fz_okay;
  76. }
  77.