diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Meerwald-dir/gray.c	Fri Dec 20 13:08:59 2024 +0100
@@ -0,0 +1,117 @@
+#include "wm.h"
+#include "gray.h"
+
+gray **alloc_grays_8x8() {
+  return alloc_grays(8, 8);
+}
+
+gray **alloc_grays(int cols, int rows) {
+  gray **p;
+  int i;
+
+  p = (gray **)malloc(rows * sizeof(gray *));
+  if (!p) {
+#ifdef DEBUG
+    fprintf(stderr, "alloc_grays(): malloc() failed\n");
+    exit(1);
+#else
+    return NULL;
+#endif
+  }
+
+  p[0] = (gray *)malloc(rows * cols * sizeof(gray));
+  if (!p[0]) {
+#ifdef DEBUG
+    fprintf(stderr, "alloc_grays(): malloc() failed\n");
+    exit(1);
+#else
+    free(p);
+    return NULL;
+#endif
+  }
+
+  for (i = 1; i < rows; i++) {
+    p[i] = &(p[0][i * cols]);
+  }
+
+  return p;
+}
+
+void free_grays(gray **grays) {
+  free(grays[0]);
+  free(grays);
+}
+
+void copy_grays_to_block(gray ** block_grays, gray ** image_grays, int c, int r, int w, int h) {
+  int i, j;
+
+#ifdef DEBUG
+  if (!image_grays) {
+    fprintf(stderr, "copy_grays_to_block(): NULL image pixels\n");
+  }
+  if (!block_grays) {
+    fprintf(stderr, "copy_grays_to_block(): NULL block pixels\n");
+  }
+  if (w <= 0 || h <= 0 || c < 0 || r < 0) {
+    fprintf(stderr, "copy_grays_to_block(): block dimension out of range\n");
+  }
+#endif
+  
+  for (i = 0; i < w; i++) {
+    for (j = 0; j < h; j++)
+      block_grays[j][i] = image_grays[r + j][c + i];
+  }
+}
+
+void copy_grays_from_block(gray ** image_grays, gray ** block_grays, int
+c, int r, int w, int h) {
+  int i, j;
+
+#ifdef DEBUG
+  if (!image_grays) {
+    fprintf(stderr, "copy_grays_from_block(): NULL image pixels\n");
+  }
+  if (!block_grays) {
+    fprintf(stderr, "copy_grays_from_block(): NULL block pixels\n");
+  }
+  if (w <= 0 || h <= 0 || c < 0 || r < 0) {
+    fprintf(stderr, "copy_grays_from_block(): block dimension out of range\n");
+  }
+#endif
+  
+  for (i = 0; i < w; i++) {
+    for (j = 0; j < h; j++)
+      image_grays[r + j][c + i] = block_grays[j][i];
+  }
+}
+
+void print_grays(gray **grays, int c, int r, int w, int h) {
+  int i, j;
+  gray *p;
+
+#ifdef DEBUG
+  if (!grays) {
+    fprintf(stderr, "print_grays(): NULL pixels\n");
+  }
+  if (w <= 0 || h <= 0 || c < 0 || r < 0) {
+    fprintf(stderr, "print_grays(): block dimension out of range\n");
+  }
+#endif
+
+  for (j = r; j < r + h; j++) {
+    p = &grays[j][c];
+    for (i = 0; i < w; i++)
+      fprintf(stderr, "%3d ", *(p++));
+    fprintf(stderr, "\n");
+  }
+}
+
+void print_grays_8x8(gray **grays) {
+  int i, j;
+
+  for (i = 0; i < 8; i++) {
+    for (j = 0; j < 8; j++)
+      fprintf(stderr, "%3d ", grays[i][j]);
+    fprintf(stderr, "\n");
+  }
+}

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