Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. /*
  2.  * Copyright 2004 James Bursa <bursa@users.sourceforge.net>
  3.  *
  4.  * This file is part of NetSurf, http://www.netsurf-browser.org/
  5.  *
  6.  * NetSurf is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License as published by
  8.  * the Free Software Foundation; version 2 of the License.
  9.  *
  10.  * NetSurf is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  17.  */
  18.  
  19. /** \file
  20.  * Generic bitmap handling (interface).
  21.  *
  22.  * This interface wraps the native platform-specific image format, so that
  23.  * portable image convertors can be written.
  24.  *
  25.  * Bitmaps are required to be 32bpp with components in the order RR GG BB AA.
  26.  *
  27.  * For example, an opaque 1x1 pixel image would yield the following bitmap
  28.  * data:
  29.  *
  30.  * Red  : 0xff 0x00 0x00 0x00
  31.  * Green: 0x00 0xff 0x00 0x00
  32.  * Blue : 0x00 0x00 0xff 0x00
  33.  *
  34.  * Any attempt to read pixels by casting bitmap data to uint32_t or similar
  35.  * will need to cater for the order of bytes in a word being different on
  36.  * big and little endian systems. To avoid confusion, it is recommended
  37.  * that pixel data is loaded as follows:
  38.  *
  39.  * uint32_t read_pixel(const uint8_t *bmp)
  40.  * {
  41.  *     //     red      green           blue              alpha
  42.  *     return bmp[0] | (bmp[1] << 8) | (bmp[2] << 16) | (bmp[3] << 24);
  43.  * }
  44.  *
  45.  * and *not* as follows:
  46.  *
  47.  * uint32_t read_pixel(const uint8_t *bmp)
  48.  * {
  49.  *     return *((uint32_t *) bmp);
  50.  * }
  51.  */
  52.  
  53. #ifndef _NETSURF_IMAGE_BITMAP_H_
  54. #define _NETSURF_IMAGE_BITMAP_H_
  55.  
  56. #include <stdbool.h>
  57. #include <stdlib.h>
  58.  
  59. #define BITMAP_NEW              0
  60. #define BITMAP_OPAQUE           (1 << 0)        /** image is opaque */
  61. #define BITMAP_MODIFIED         (1 << 1)        /** buffer has been modified */
  62. #define BITMAP_PERSISTENT       (1 << 2)        /** retain between sessions */
  63. #define BITMAP_CLEAR_MEMORY     (1 << 3)        /** memory should be wiped */
  64. #define BITMAP_READY            (1 << 4)        /** fully initialised */
  65.  
  66. #define BITMAP_SAVE_FULL_ALPHA  (1 << 0)        /** save with full alpha channel (if not opaque) */
  67.  
  68. struct content;
  69.  
  70. /** An opaque image. */
  71. struct bitmap;
  72.  
  73. void *bitmap_create(int width, int height, unsigned int state);
  74. void bitmap_set_opaque(void *bitmap, bool opaque);
  75. bool bitmap_test_opaque(void *bitmap);
  76. bool bitmap_get_opaque(void *bitmap);
  77. unsigned char *bitmap_get_buffer(void *bitmap);
  78. size_t bitmap_get_rowstride(void *bitmap);
  79. size_t bitmap_get_bpp(void *bitmap);
  80. void bitmap_destroy(void *bitmap);
  81. bool bitmap_save(void *bitmap, const char *path, unsigned flags);
  82. void bitmap_modified(void *bitmap);
  83.  
  84. int bitmap_get_width(void *bitmap);
  85. int bitmap_get_height(void *bitmap);
  86.  
  87. #endif
  88.