File: Raster.c

package info (click to toggle)
grass 6.4.4-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 104,028 kB
  • ctags: 40,409
  • sloc: ansic: 419,980; python: 63,559; tcl: 46,692; cpp: 29,791; sh: 18,564; makefile: 7,000; xml: 3,505; yacc: 561; perl: 559; lex: 480; sed: 70; objc: 7
file content (65 lines) | stat: -rw-r--r-- 1,429 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65

#include <string.h>

#include "psdriver.h"

static int masked;

void PS_begin_scaled_raster(int mask, int src[2][2], int dst[2][2])
{
    const char *type = true_color ? (mask ? "RASTERRGBMASK" : "RASTERRGB")
	: (mask ? "RASTERGRAYMASK" : "RASTERGRAY");

    int ssx = src[0][1] - src[0][0];
    int ssy = src[1][1] - src[1][0];
    int sox = src[0][0];
    int soy = src[1][0];

    int dsx = dst[0][1] - dst[0][0];
    int dsy = dst[1][1] - dst[1][0];
    int dox = dst[0][0];
    int doy = dst[1][0];

    masked = mask;

    output("gsave\n");
    output("%d %d translate %d %d scale\n", dox, doy, dsx, dsy);
    output("%d %d [%d 0 0 %d %d %d] %s\n", ssx, ssy, ssx, ssy, sox, soy,
	   type);
}

int PS_scaled_raster(int n, int row,
		     const unsigned char *red, const unsigned char *grn,
		     const unsigned char *blu, const unsigned char *nul)
{
    int i;

    for (i = 0; i < n; i++) {
	if (true_color) {
	    if (masked)
		output("%02X%02X%02X%02X", (nul && nul[i]) ? 0xFF : 0x00,
		       red[i], grn[i], blu[i]);
	    else
		output("%02X%02X%02X", red[i], grn[i], blu[i]);
	}
	else {
	    unsigned int gray =
		(unsigned int)(red[i] * 0.299 + grn[i] * 0.587 +
			       blu[i] * 0.114);

	    if (masked)
		output("%02X%02X", (nul && nul[i]) ? 0xFF : 0x00, gray);
	    else
		output("%02X", gray);
	}
    }

    output("\n");

    return row + 1;
}

void PS_end_scaled_raster(void)
{
    output("grestore\n");
}