X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=images%2Fio-libmagick.c;h=0a31c0afccb23031885b2098471d470da7ca9d54;hb=0db6e10eac28f38bfc3b325b13ad95107c58ce1e;hp=cdf58048ced1d69946e6ce3d11dc28b3c15cb3da;hpb=62eda8640605c19ecd817e274e75717022349732;p=libucw.git diff --git a/images/io-libmagick.c b/images/io-libmagick.c index cdf58048..0a31c0af 100644 --- a/images/io-libmagick.c +++ b/images/io-libmagick.c @@ -9,13 +9,13 @@ #undef LOCAL_DEBUG -#include "lib/lib.h" -#include "lib/mempool.h" -#include "lib/fastbuf.h" -#include "images/images.h" -#include "images/error.h" -#include "images/color.h" -#include "images/io-main.h" +#include +#include +#include +#include +#include +#include +#include #include #include @@ -82,7 +82,7 @@ libmagick_read_header(struct image_io *io) DBG("libmagick_read_header()"); /* Read entire stream */ - sh_off_t file_size = bfilesize(io->fastbuf) - btell(io->fastbuf); + ucw_off_t file_size = bfilesize(io->fastbuf) - btell(io->fastbuf); if (unlikely(file_size > MAX_FILE_SIZE)) { IMAGE_ERROR(io->context, IMAGE_ERROR_READ_FAILED, "Too long stream."); @@ -170,8 +170,11 @@ libmagick_read_data(struct image_io *io) /* Prepare the image */ struct image_io_read_data_internals rdi; uns read_flags = io->flags; + uns cs = read_flags & IMAGE_COLOR_SPACE; + if (cs != COLOR_SPACE_GRAYSCALE && cs != COLOR_SPACE_RGB) + read_flags = (read_flags & ~IMAGE_COLOR_SPACE & IMAGE_PIXEL_FORMAT) | COLOR_SPACE_RGB; if ((read_flags & IMAGE_IO_USE_BACKGROUND) && !(read_flags & IMAGE_ALPHA)) - read_flags = (read_flags | IMAGE_ALPHA) & IMAGE_CHANNELS_FORMAT; + read_flags = (read_flags & IMAGE_CHANNELS_FORMAT) | IMAGE_ALPHA; if (unlikely(!image_io_read_data_prepare(&rdi, io, rd->image->columns, rd->image->rows, read_flags))) { libmagick_destroy_read_data(rd); @@ -200,7 +203,7 @@ libmagick_read_data(struct image_io *io) # define IMAGE_WALK_DO_STEP do{ \ walk_pos[0] = libmagick_pixel_to_gray(src); \ src++; }while(0) -# include "images/image-walk.h" +# include break; case 2: @@ -213,7 +216,7 @@ libmagick_read_data(struct image_io *io) walk_pos[0] = libmagick_pixel_to_gray(src); \ walk_pos[1] = ALPHA_TO_BYTE(src->opacity); \ src++; }while(0) -# include "images/image-walk.h" +# include break; case 3: @@ -227,7 +230,7 @@ libmagick_read_data(struct image_io *io) walk_pos[1] = QUANTUM_TO_BYTE(src->green); \ walk_pos[2] = QUANTUM_TO_BYTE(src->blue); \ src++; }while(0) -# include "images/image-walk.h" +# include break; case 4: @@ -242,7 +245,7 @@ libmagick_read_data(struct image_io *io) walk_pos[2] = QUANTUM_TO_BYTE(src->blue); \ walk_pos[3] = ALPHA_TO_BYTE(src->opacity); \ src++; }while(0) -# include "images/image-walk.h" +# include break; default: @@ -279,7 +282,8 @@ libmagick_write(struct image_io *io) info->colorspace = RGBColorspace; break; default: - ASSERT(0); + IMAGE_ERROR(io->context, IMAGE_ERROR_WRITE_FAILED, "Unsupported color space."); + goto err; } switch (io->format) { @@ -329,7 +333,7 @@ libmagick_write(struct image_io *io) dest->blue = BYTE_TO_QUANTUM(walk_pos[0]); \ dest->opacity = 0; \ dest++; }while(0) -# include "images/image-walk.h" +# include break; case 2: @@ -344,7 +348,7 @@ libmagick_write(struct image_io *io) dest->blue = BYTE_TO_QUANTUM(walk_pos[0]); \ dest->opacity = BYTE_TO_ALPHA(walk_pos[1]); \ dest++; }while(0) -# include "images/image-walk.h" +# include break; case 3: @@ -359,7 +363,7 @@ libmagick_write(struct image_io *io) dest->blue = BYTE_TO_QUANTUM(walk_pos[2]); \ dest->opacity = 0; \ dest++; }while(0) -# include "images/image-walk.h" +# include break; case 4: @@ -374,7 +378,7 @@ libmagick_write(struct image_io *io) dest->blue = BYTE_TO_QUANTUM(walk_pos[2]); \ dest->opacity = BYTE_TO_ALPHA(walk_pos[3]); \ dest++; }while(0) -# include "images/image-walk.h" +# include break; default: