GRASS GIS 8 Programmer's Manual 8.2.1RC1(2022)-exported
psdriver/raster.c
Go to the documentation of this file.
1
2#include <string.h>
3
4#include "psdriver.h"
5
6static int masked;
7
8void PS_begin_raster(int mask, int src[2][2], double dst[2][2])
9{
10 const char *type = ps.true_color ? (mask ? "RASTERRGBMASK" : "RASTERRGB")
11 : (mask ? "RASTERGRAYMASK" : "RASTERGRAY");
12
13 int ssx = src[0][1] - src[0][0];
14 int ssy = src[1][1] - src[1][0];
15 int sox = src[0][0];
16 int soy = src[1][0];
17
18 double dsx = dst[0][1] - dst[0][0];
19 double dsy = dst[1][1] - dst[1][0];
20 double dox = dst[0][0];
21 double doy = dst[1][0];
22
23 masked = mask;
24
25 output("gsave\n");
26 output("%f %f translate %f %f scale\n", dox, doy, dsx, dsy);
27 output("%d %d [%d 0 0 %d %d %d] %s\n", ssx, ssy, ssx, ssy, sox, soy,
28 type);
29}
30
31int PS_raster(int n, int row,
32 const unsigned char *red, const unsigned char *grn,
33 const unsigned char *blu, const unsigned char *nul)
34{
35 int i;
36
37 for (i = 0; i < n; i++) {
38 if (ps.true_color) {
39 if (masked)
40 output("%02X%02X%02X%02X", (nul && nul[i]) ? 0xFF : 0x00,
41 red[i], grn[i], blu[i]);
42 else
43 output("%02X%02X%02X", red[i], grn[i], blu[i]);
44 }
45 else {
46 unsigned int gray =
47 (unsigned int)(red[i] * 0.299 + grn[i] * 0.587 +
48 blu[i] * 0.114);
49
50 if (masked)
51 output("%02X%02X", (nul && nul[i]) ? 0xFF : 0x00, gray);
52 else
53 output("%02X", gray);
54 }
55 }
56
57 output("\n");
58
59 return row + 1;
60}
61
62void PS_end_raster(void)
63{
64 output("grestore\n");
65}
char * dst
Definition: lz4.h:599
struct ps_state ps
void output(const char *fmt,...)
void PS_begin_raster(int mask, int src[2][2], double dst[2][2])
void PS_end_raster(void)
int PS_raster(int n, int row, const unsigned char *red, const unsigned char *grn, const unsigned char *blu, const unsigned char *nul)
int true_color
Definition: psdriver.h:15