From 54272f27fb1e4f8d838e396b17c28e4e507cb52b Mon Sep 17 00:00:00 2001 From: Bastian Dehn Date: Sat, 25 Jan 2025 22:18:14 +0100 Subject: [PATCH] add implement pnm get metadata --- src/kds_s2000w_image_converter_netpbm.c | 58 +++++++++++++++++++++++++ 1 file changed, 58 insertions(+) diff --git a/src/kds_s2000w_image_converter_netpbm.c b/src/kds_s2000w_image_converter_netpbm.c index e76c6e6..9e2acb7 100644 --- a/src/kds_s2000w_image_converter_netpbm.c +++ b/src/kds_s2000w_image_converter_netpbm.c @@ -1,7 +1,65 @@ +#include +#include #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; } -- 2.39.5