GRASS 8 Programmer's Manual
8.5.0(2026)-8d6ceba290
Toggle main menu visibility
Loading...
Searching...
No Matches
cairodriver/draw_bitmap.c
Go to the documentation of this file.
1
/*!
2
\file lib/cairodriver/draw_bitmap.c
3
4
\brief GRASS cairo display driver - draw bitmap
5
6
(C) 2007-2008 by Lars Ahlzen and the GRASS Development Team
7
8
This program is free software under the GNU General Public License
9
(>=v2). Read the file COPYING that comes with GRASS for details.
10
11
\author Lars Ahlzen <lars ahlzen.com> (original contributor)
12
\author Glynn Clements
13
*/
14
15
#include <grass/glocale.h>
16
17
#include "
cairodriver.h
"
18
19
/*!
20
\brief Draw bitmap
21
22
\param ncols,nrows number of columns and rows
23
\param threshold threshold value
24
\param buf data buffer
25
*/
26
void
Cairo_Bitmap
(
int
ncols,
int
nrows,
int
threshold,
const
unsigned
char
*buf)
27
{
28
cairo_surface_t *surf;
29
int
stride;
30
unsigned
char
*data;
31
int
i;
32
33
G_debug
(1,
"Cairo_Bitmap: %d %d %d"
, ncols, nrows, threshold);
34
35
#if CAIRO_VERSION >= CAIRO_VERSION_ENCODE(1, 5, 8)
36
stride = cairo_format_stride_for_width(CAIRO_FORMAT_A8, ncols);
37
#else
38
#define MULTIPLE 4
39
stride = (ncols + (MULTIPLE - 1)) / MULTIPLE * MULTIPLE;
40
#endif
41
data = malloc(stride * nrows);
42
surf = cairo_image_surface_create_for_data(data, CAIRO_FORMAT_A8, ncols,
43
nrows, stride);
44
45
if
(cairo_surface_status(surf) != CAIRO_STATUS_SUCCESS)
46
G_fatal_error
(_(
"Cairo_Bitmap: Failed to create source"
));
47
48
for
(i = 0; i < nrows; i++)
49
memcpy(&data[i * stride], &buf[i * ncols], ncols);
50
51
cairo_surface_mark_dirty(surf);
52
cairo_mask_surface(
cairo
, surf,
cur_x
,
cur_y
);
53
54
cairo_surface_destroy(surf);
55
ca
.modified = 1;
56
}
Cairo_Bitmap
void Cairo_Bitmap(int ncols, int nrows, int threshold, const unsigned char *buf)
Draw bitmap.
Definition
cairodriver/draw_bitmap.c:26
cairodriver.h
GRASS cairo display driver - header file.
ca
struct cairo_state ca
Definition
cairodriver/graph.c:42
cairo
cairo_t * cairo
Definition
cairodriver/graph.c:46
G_debug
int G_debug(int level, const char *msg,...)
Print debugging message.
Definition
debug.c:66
cur_x
double cur_x
Definition
driver/init.c:32
cur_y
double cur_y
Definition
driver/init.c:33
G_fatal_error
void G_fatal_error(const char *msg,...)
Print a fatal error message to stderr.
Definition
gis/error.c:159
cairodriver
draw_bitmap.c
Generated on
for GRASS 8 Programmer's Manual by
1.17.0