// transparent read method to load ldr image to dt_raw_image_t with exif and so on. dt_imageio_retval_t dt_imageio_open_ldr( dt_image_t *img, const char *filename, dt_mipmap_cache_allocator_t a) { dt_imageio_retval_t ret; ret = dt_imageio_open_tiff(img, filename, a); if(ret == DT_IMAGEIO_OK || ret == DT_IMAGEIO_CACHE_FULL) { img->filters = 0; img->flags &= ~DT_IMAGE_RAW; img->flags &= ~DT_IMAGE_HDR; img->flags |= DT_IMAGE_LDR; return ret; } // jpeg stuff here: if(!img->exif_inited) (void) dt_exif_read(img, filename); const int orientation = dt_image_orientation(img); dt_imageio_jpeg_t jpg; if(dt_imageio_jpeg_read_header(filename, &jpg)) return DT_IMAGEIO_FILE_CORRUPTED; img->width = (orientation & 4) ? jpg.height : jpg.width; img->height = (orientation & 4) ? jpg.width : jpg.height; uint8_t *tmp = (uint8_t *)malloc(sizeof(uint8_t)*jpg.width*jpg.height*4); if(dt_imageio_jpeg_read(&jpg, tmp)) { free(tmp); return DT_IMAGEIO_FILE_CORRUPTED; } img->bpp = 4*sizeof(float); void *buf = dt_mipmap_cache_alloc(img, DT_MIPMAP_FULL, a); if(!buf) { free(tmp); return DT_IMAGEIO_CACHE_FULL; } dt_imageio_flip_buffers_ui8_to_float((float *)buf, tmp, 0.0f, 255.0f, 4, jpg.width, jpg.height, jpg.width, jpg.height, 4*jpg.width, orientation); free(tmp); img->filters = 0; img->flags &= ~DT_IMAGE_RAW; img->flags &= ~DT_IMAGE_HDR; img->flags |= DT_IMAGE_LDR; return DT_IMAGEIO_OK; }
// transparent read method to load ldr image to dt_raw_image_t with exif and so on. dt_imageio_retval_t dt_imageio_open_ldr( dt_image_t *img, const char *filename, dt_mipmap_cache_allocator_t a) { dt_imageio_retval_t ret; ret = dt_imageio_open_tiff(img, filename, a); if(ret == DT_IMAGEIO_OK || ret == DT_IMAGEIO_CACHE_FULL) { img->filters = 0; img->flags &= ~DT_IMAGE_RAW; img->flags &= ~DT_IMAGE_HDR; img->flags |= DT_IMAGE_LDR; return ret; } ret = dt_imageio_open_png(img, filename, a); if(ret == DT_IMAGEIO_OK || ret == DT_IMAGEIO_CACHE_FULL) { img->filters = 0; img->flags &= ~DT_IMAGE_RAW; img->flags &= ~DT_IMAGE_HDR; img->flags |= DT_IMAGE_LDR; return ret; } #ifdef HAVE_OPENJPEG ret = dt_imageio_open_j2k(img, filename, a); if(ret == DT_IMAGEIO_OK || ret == DT_IMAGEIO_CACHE_FULL) { img->filters = 0; img->flags &= ~DT_IMAGE_RAW; img->flags &= ~DT_IMAGE_HDR; img->flags |= DT_IMAGE_LDR; return ret; } #endif ret = dt_imageio_open_jpeg(img, filename, a); if(ret == DT_IMAGEIO_OK || ret == DT_IMAGEIO_CACHE_FULL) { img->filters = 0; img->flags &= ~DT_IMAGE_RAW; img->flags &= ~DT_IMAGE_HDR; img->flags |= DT_IMAGE_LDR; return ret; } return DT_IMAGEIO_FILE_CORRUPTED; }
// transparent read method to load ldr image to dt_raw_image_t with exif and so on. dt_imageio_retval_t dt_imageio_open_ldr(dt_image_t *img, const char *filename, dt_mipmap_buffer_t *buf) { dt_imageio_retval_t ret; ret = dt_imageio_open_tiff(img, filename, buf); if(ret == DT_IMAGEIO_OK || ret == DT_IMAGEIO_CACHE_FULL) { img->buf_dsc.filters = 0u; img->flags &= ~DT_IMAGE_RAW; img->flags &= ~DT_IMAGE_HDR; img->flags |= DT_IMAGE_LDR; img->loader = LOADER_TIFF; return ret; } ret = dt_imageio_open_png(img, filename, buf); if(ret == DT_IMAGEIO_OK || ret == DT_IMAGEIO_CACHE_FULL) { img->buf_dsc.filters = 0u; img->flags &= ~DT_IMAGE_RAW; img->flags &= ~DT_IMAGE_HDR; img->flags |= DT_IMAGE_LDR; img->loader = LOADER_PNG; return ret; } #ifdef HAVE_OPENJPEG ret = dt_imageio_open_j2k(img, filename, buf); if(ret == DT_IMAGEIO_OK || ret == DT_IMAGEIO_CACHE_FULL) { img->buf_dsc.filters = 0u; img->flags &= ~DT_IMAGE_RAW; img->flags &= ~DT_IMAGE_HDR; img->flags |= DT_IMAGE_LDR; img->loader = LOADER_J2K; return ret; } #endif ret = dt_imageio_open_jpeg(img, filename, buf); if(ret == DT_IMAGEIO_OK || ret == DT_IMAGEIO_CACHE_FULL) { img->buf_dsc.filters = 0u; img->flags &= ~DT_IMAGE_RAW; img->flags &= ~DT_IMAGE_HDR; img->flags |= DT_IMAGE_LDR; img->loader = LOADER_JPEG; return ret; } return DT_IMAGEIO_FILE_CORRUPTED; }