GRASS GIS 8 Programmer's Manual 8.3.2(2024)-exported
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 */
26void 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}
void Cairo_Bitmap(int ncols, int nrows, int threshold, const unsigned char *buf)
Draw bitmap.
GRASS cairo display driver - header file.
struct cairo_state ca
cairo_t * cairo
int G_debug(int level, const char *msg,...)
Print debugging message.
Definition debug.c:66
double cur_x
Definition driver/init.c:32
double cur_y
Definition driver/init.c:33
void G_fatal_error(const char *msg,...)
Print a fatal error message to stderr.
Definition gis/error.c:159