GRASS GIS 8 Programmer's Manual 8.4.1(2025)-45ca3179ab
Loading...
Searching...
No Matches
pngdriver/write_ppm.c
Go to the documentation of this file.
1/*!
2 \file lib/pngdriver/write_ppm.c
3
4 \brief GRASS png display driver - write PPM image (lower level functions)
5
6 (C) 2007-2014 by Glynn Clements 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 Glynn Clements
12 */
13
14#include <stdio.h>
15#include <stdlib.h>
16#include <string.h>
17
18#include <grass/gis.h>
19#include "pngdriver.h"
20
21void write_ppm(void)
22{
23 FILE *output;
24 int x, y;
25 unsigned int *p;
26
27 output = fopen(png.file_name, "wb");
28 if (!output)
29 G_fatal_error("PNG: couldn't open output file %s", png.file_name);
30
31 fprintf(output, "P6\n%d %d\n255\n", png.width, png.height);
32
33 for (y = 0, p = png.grid; y < png.height; y++) {
34 for (x = 0; x < png.width; x++, p++) {
35 unsigned int c = *p;
36 int r, g, b, a;
37
38 png_get_pixel(c, &r, &g, &b, &a);
39
40 fputc((unsigned char)r, output);
41 fputc((unsigned char)g, output);
42 fputc((unsigned char)b, output);
43 }
44 }
45
46 fclose(output);
47}
48
49void write_pgm(void)
50{
51 char *mask_name = G_store(png.file_name);
52 FILE *output;
53 int x, y;
54 unsigned int *p;
55
56 mask_name[strlen(mask_name) - 2] = 'g';
57
58 output = fopen(mask_name, "wb");
59 if (!output)
60 G_fatal_error("PNG: couldn't open mask file %s", mask_name);
61
62 G_free(mask_name);
63
64 fprintf(output, "P5\n%d %d\n255\n", png.width, png.height);
65
66 for (y = 0, p = png.grid; y < png.height; y++) {
67 for (x = 0; x < png.width; x++, p++) {
68 unsigned int c = *p;
69 int r, g, b, a;
70
71 png_get_pixel(c, &r, &g, &b, &a);
72
73 fputc((unsigned char)(255 - a), output);
74 }
75 }
76
77 fclose(output);
78}
void G_free(void *buf)
Free allocated memory.
Definition alloc.c:150
void png_get_pixel(unsigned int pixel, int *r, int *g, int *b, int *a)
double b
double r
void G_fatal_error(const char *msg,...)
Print a fatal error message to stderr.
Definition gis/error.c:159
float g
Definition named_colr.c:7
struct png_state png
void write_pgm(void)
void write_ppm(void)
GRASS png display driver - header file.
void output(const char *fmt,...)
char * G_store(const char *s)
Copy string to allocated memory.
Definition strings.c:87
#define x