RGB = 3
};
+typedef struct {
+ blobdata* image;
+ toff_t curr_offset;
+} tiff_reader;
+
tsize_t _kds_s2000w_image_converter_tiff_read(thandle_t handler, tdata_t data, tsize_t size)
{
- return fread(data, sizeof(char), size, handler);
+ tiff_reader* reader = (tiff_reader*) handler;
+ char* imagedata = (char*) reader->image->data;
+ memcpy(data, &imagedata[reader->curr_offset], size);
+ reader->curr_offset += size;
+
+ return size;
}
tsize_t _kds_s2000w_image_converter_tiff_write(thandle_t handler, tdata_t data, tsize_t size)
{
- return fwrite(data, sizeof(char), size, handler);
+ tiff_reader* writer = (tiff_reader*) handler;
+ char* imagedata = (char*) writer->image->data;
+ memcpy(&imagedata[writer->curr_offset], data, size);
+ writer->curr_offset += size;
+
+ return size;
}
toff_t _kds_s2000w_image_converter_tiff_seek(thandle_t handler, toff_t offset, int whence)
{
- fseek(handler, offset, whence);
- return ftell(handler);
+ tiff_reader* reader = (tiff_reader*) handler;
+
+ switch (whence) {
+ case SEEK_SET:
+ reader->curr_offset = offset;
+ break;
+ case SEEK_CUR:
+ reader->curr_offset += offset;
+ break;
+ case SEEK_END:
+ reader->curr_offset = reader->image->size - 1;
+ reader->curr_offset += offset;
+ break;
+ default:
+ break;
+ }
+
+ return reader->curr_offset;
}
int _kds_s2000w_image_converter_tiff_close(thandle_t handler)
{
- return fclose(handler);
+ tiff_reader* reader = (tiff_reader*) handler;
+
+ free(reader);
+ reader = NULL;
+
+ return 0;
}
toff_t _kds_s2000w_image_converter_tiff_size(thandle_t handler)
{
- return ftell(handler);
+ tiff_reader* reader = (tiff_reader*) handler;
+
+ return reader->curr_offset;
}
uint32_t _kds_s2000w_image_converter_find_char(blobdata* image, uint32_t start, const char cfind)
void _kds_s2000w_image_converter_tiff_metadata(blobdata* image, image_metadata* mdata)
{
- FILE* input = fmemopen(image->data, image->size, "r");
- TIFF* tiff = TIFFClientOpen("input.tiff", "r", input,
+ tiff_reader* tiff_handler = malloc(sizeof(tiff_reader));
+ tiff_handler->image = image;
+ tiff_handler->curr_offset = 0;
+ TIFF* tiff = TIFFClientOpen("input.tiff", "r", (thandle_t) tiff_handler,
_kds_s2000w_image_converter_tiff_read,
_kds_s2000w_image_converter_tiff_write,
_kds_s2000w_image_converter_tiff_seek,
{
kds_s2000w_debug_printf(ALL, "kds_s2000w_image_converter_tiff_to_pnm");
- FILE* tiff_stream = fmemopen(in->data, in->size, "r");
- TIFF* tiff = TIFFClientOpen("input.tiff", "r", tiff_stream,
+ tiff_reader* tiff_handler = malloc(sizeof(tiff_reader));
+ tiff_handler->image = in;
+ tiff_handler->curr_offset = 0;
+ TIFF* tiff = TIFFClientOpen("input.tiff", "r", (thandle_t*) tiff_handler,
_kds_s2000w_image_converter_tiff_read,
_kds_s2000w_image_converter_tiff_write,
_kds_s2000w_image_converter_tiff_seek,