From: Bastian Dehn Date: Sun, 26 Jan 2025 21:04:58 +0000 (+0100) Subject: add tiff read and write pbm wrong X-Git-Tag: v1.0.29^2~3^2~16 X-Git-Url: https://gitweb.hhaalo.de/?a=commitdiff_plain;h=61e0cb3833c7d0307bbd8289adc1a81863ba9de4;p=sane-kds-s2000w-net.git add tiff read and write pbm wrong --- diff --git a/src/kds_s2000w_image_converter_netpbm.c b/src/kds_s2000w_image_converter_netpbm.c index 0d67d4f..30e662d 100644 --- a/src/kds_s2000w_image_converter_netpbm.c +++ b/src/kds_s2000w_image_converter_netpbm.c @@ -286,4 +286,51 @@ void kds_s2000w_image_converter_tiff_to_pnm(blobdata* in, blobdata* out) if (!kds_s2000w_image_type_check_is_tiff(in)) return; + + FILE* tiff_stream = fmemopen(in->data, in->size, "r"); + TIFF* tiff = TIFFClientOpen("input.tiff", "r", tiff_stream, + _kds_s2000w_image_converter_tiff_read, + _kds_s2000w_image_converter_tiff_write, + _kds_s2000w_image_converter_tiff_seek, + _kds_s2000w_image_converter_tiff_close, + _kds_s2000w_image_converter_tiff_size, + NULL, NULL); + + int width = 0; + int height = 0; + TIFFGetField(tiff, TIFFTAG_IMAGEWIDTH, &width); + TIFFGetField(tiff, TIFFTAG_IMAGELENGTH, &height); + + bit** bits = malloc(sizeof(bit*) * height); + for (int i = 0; i < height; i++) { + bits[i] = malloc(sizeof(bit) * width); + } + + unsigned char* rowbuf = malloc(sizeof(unsigned char) * width); + for (int i = 0; i < height; i++) { + TIFFReadScanline(tiff, bits[i], i, 0); + } + free(rowbuf); + rowbuf = NULL; + + char** outdata = malloc(sizeof(char*)); + FILE* pnm_stream = open_memstream(outdata, &out->size); + pbm_writepbm(pnm_stream, bits, width, height, 0); + fclose(pnm_stream); + pnm_stream = NULL; + + out->data = malloc(sizeof(char) * out->size); + memcpy(out->data, *outdata, out->size); + + free(*outdata); + *outdata = NULL; + free(outdata); + outdata = NULL; + TIFFClose(tiff); + for (int i = 0; i < height; i++) { + free(bits[i]); + bits[i] = NULL; + } + free(bits); + bits = NULL; }