Subversion Repositories Kolibri OS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
3584 sourcerer 1
/*
2
 * Copyright 2004 James Bursa 
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 .
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 
57
#include 
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