comparison Meerwald-dir/gray.c @ 24:9f20bce6184e v0.7

move directories, support netpbm 11
author Peter Meerwald-Stadler <pmeerw@pmeerw.net>
date Fri, 20 Dec 2024 13:08:59 +0100
parents Meerwald/gray.c@be303a3f5ea8
children
comparison
equal deleted inserted replaced
23:71dd4b96221b 24:9f20bce6184e
1 #include "wm.h"
2 #include "gray.h"
3
4 gray **alloc_grays_8x8() {
5 return alloc_grays(8, 8);
6 }
7
8 gray **alloc_grays(int cols, int rows) {
9 gray **p;
10 int i;
11
12 p = (gray **)malloc(rows * sizeof(gray *));
13 if (!p) {
14 #ifdef DEBUG
15 fprintf(stderr, "alloc_grays(): malloc() failed\n");
16 exit(1);
17 #else
18 return NULL;
19 #endif
20 }
21
22 p[0] = (gray *)malloc(rows * cols * sizeof(gray));
23 if (!p[0]) {
24 #ifdef DEBUG
25 fprintf(stderr, "alloc_grays(): malloc() failed\n");
26 exit(1);
27 #else
28 free(p);
29 return NULL;
30 #endif
31 }
32
33 for (i = 1; i < rows; i++) {
34 p[i] = &(p[0][i * cols]);
35 }
36
37 return p;
38 }
39
40 void free_grays(gray **grays) {
41 free(grays[0]);
42 free(grays);
43 }
44
45 void copy_grays_to_block(gray ** block_grays, gray ** image_grays, int c, int r, int w, int h) {
46 int i, j;
47
48 #ifdef DEBUG
49 if (!image_grays) {
50 fprintf(stderr, "copy_grays_to_block(): NULL image pixels\n");
51 }
52 if (!block_grays) {
53 fprintf(stderr, "copy_grays_to_block(): NULL block pixels\n");
54 }
55 if (w <= 0 || h <= 0 || c < 0 || r < 0) {
56 fprintf(stderr, "copy_grays_to_block(): block dimension out of range\n");
57 }
58 #endif
59
60 for (i = 0; i < w; i++) {
61 for (j = 0; j < h; j++)
62 block_grays[j][i] = image_grays[r + j][c + i];
63 }
64 }
65
66 void copy_grays_from_block(gray ** image_grays, gray ** block_grays, int
67 c, int r, int w, int h) {
68 int i, j;
69
70 #ifdef DEBUG
71 if (!image_grays) {
72 fprintf(stderr, "copy_grays_from_block(): NULL image pixels\n");
73 }
74 if (!block_grays) {
75 fprintf(stderr, "copy_grays_from_block(): NULL block pixels\n");
76 }
77 if (w <= 0 || h <= 0 || c < 0 || r < 0) {
78 fprintf(stderr, "copy_grays_from_block(): block dimension out of range\n");
79 }
80 #endif
81
82 for (i = 0; i < w; i++) {
83 for (j = 0; j < h; j++)
84 image_grays[r + j][c + i] = block_grays[j][i];
85 }
86 }
87
88 void print_grays(gray **grays, int c, int r, int w, int h) {
89 int i, j;
90 gray *p;
91
92 #ifdef DEBUG
93 if (!grays) {
94 fprintf(stderr, "print_grays(): NULL pixels\n");
95 }
96 if (w <= 0 || h <= 0 || c < 0 || r < 0) {
97 fprintf(stderr, "print_grays(): block dimension out of range\n");
98 }
99 #endif
100
101 for (j = r; j < r + h; j++) {
102 p = &grays[j][c];
103 for (i = 0; i < w; i++)
104 fprintf(stderr, "%3d ", *(p++));
105 fprintf(stderr, "\n");
106 }
107 }
108
109 void print_grays_8x8(gray **grays) {
110 int i, j;
111
112 for (i = 0; i < 8; i++) {
113 for (j = 0; j < 8; j++)
114 fprintf(stderr, "%3d ", grays[i][j]);
115 fprintf(stderr, "\n");
116 }
117 }

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.