]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
add implement pnm get metadata
authorBastian Dehn <hhaalo@arcor.de>
Sat, 25 Jan 2025 21:18:14 +0000 (22:18 +0100)
committerBastian Dehn <hhaalo@arcor.de>
Sat, 25 Jan 2025 21:18:14 +0000 (22:18 +0100)
src/kds_s2000w_image_converter_netpbm.c

index e76c6e6b6f1d7f7f43a9001ad88e41d80952a1f8..9e2acb71ffe372de8328c4595cec1e5a4ac20268 100644 (file)
@@ -1,7 +1,65 @@
+#include <string.h>
+#include <netpbm/pnm.h>
 #include "kds_s2000w_image_converter.h"
 
+#define SPACE 0x0a
+#define SPACE_WIDTH_HEIGHT 0x20
+#define MAXBUFFER 6
+
+int _kds_s2000w_image_converter_find_char(blobdata* image, int start, const char cfind)
+{
+       char* image_data = (char*) image->data;
+
+       for (int i = start; i < image->size; i++) {
+               if (image_data[i] == cfind)
+                       return i;
+       }
+
+       return 0;
+}
+
+int _kds_s2000w_image_converter_get_number_from_substring(char* data, int start, int end)
+{
+       int number = 0;
+
+       char* number_buffer = malloc(sizeof(char) * MAXBUFFER);
+       memset(number_buffer, 0, MAXBUFFER);
+       strncpy(number_buffer, &data[start + 1], end - start - 1);
+       number = atoi(number_buffer);
+
+       free(number_buffer);
+       number_buffer = NULL;
+
+       return number;
+}
+
+void _kds_s2000w_image_converter_pnm_metadata(blobdata* image, image_metadata* mdata)
+{
+       char* image_data = (char*) image->data;
+
+       mdata->depth = 8;
+       if (strncmp(image_data, "P4", 2) == 0)
+               mdata->depth = 1;
+
+       int start = _kds_s2000w_image_converter_find_char(image, 0, SPACE);
+       int middle = _kds_s2000w_image_converter_find_char(image, start, SPACE_WIDTH_HEIGHT);
+       int end = _kds_s2000w_image_converter_find_char(image, middle, SPACE);
+
+       mdata->width = _kds_s2000w_image_converter_get_number_from_substring(image_data, start, middle);
+       mdata->height = _kds_s2000w_image_converter_get_number_from_substring(image_data, middle, end);
+}
+
 void kds_s2000w_image_converter_metadata_from_scanner_image(blobdata* image, image_metadata* mdata)
 {
+       if (image->size < 2)
+               return;
+
+       if (strncmp(image->data, "P6", 2) == 0
+               || strncmp (image->data, "P4", 2) == 0) {
+               _kds_s2000w_image_converter_pnm_metadata(image, mdata);
+               return;
+       }
+
        return;
 }