X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=images%2Fio-main.c;h=2244cf8571421703e5f117180d23ad2fca7117e6;hb=1bc3bb66e47ec02003658fb3040aef0ffd7b7540;hp=7b176b70a187e4944bfa8af6966e4a3a3f6b96a3;hpb=62eda8640605c19ecd817e274e75717022349732;p=libucw.git diff --git a/images/io-main.c b/images/io-main.c index 7b176b70..2244cf85 100644 --- a/images/io-main.c +++ b/images/io-main.c @@ -9,11 +9,12 @@ #undef LOCAL_DEBUG -#include "lib/lib.h" -#include "lib/mempool.h" -#include "images/images.h" -#include "images/error.h" -#include "images/io-main.h" +#include +#include +#include +#include +#include +#include #include @@ -51,7 +52,7 @@ libungif_failed: #endif #ifdef CONFIG_IMAGES_LIBPNG libpng_cleanup(io); -libpng_failed: +libpng_failed: #endif #ifdef CONFIG_IMAGES_LIBJPEG libjpeg_cleanup(io); @@ -302,7 +303,7 @@ image_file_name_to_format(byte *file_name) } struct image * -image_io_read_data_prepare(struct image_io_read_data_internals *rdi, struct image_io *io, uns cols, uns rows, uns flags) +image_io_read_data_prepare(struct image_io_read_data_internals *rdi, struct image_io *io, uint cols, uint rows, uint flags) { DBG("image_io_read_data_prepare()"); if (rdi->need_transformations = io->cols != cols || io->rows != rows || @@ -322,7 +323,7 @@ image_io_read_data_finish(struct image_io_read_data_internals *rdi, struct image if (io->cols != rdi->image->cols || io->rows != rdi->image->rows) { DBG("Scaling image"); - uns flags = rdi->image->flags; + uint flags = rdi->image->flags; if (!(rdi->need_transformations = ((io->flags ^ rdi->image->flags) & (IMAGE_NEW_FLAGS & ~IMAGE_PIXELS_ALIGNED)))) flags = io->flags; struct image *img = image_new(io->context, io->cols, io->rows, flags, rdi->need_transformations ? NULL : io->pool); @@ -341,20 +342,18 @@ image_io_read_data_finish(struct image_io_read_data_internals *rdi, struct image rdi->image = img; } - /* Merge with background */ - if ((io->flags ^ rdi->image->flags) & IMAGE_ALPHA) + /* Convert pixel format */ + if (io->flags != rdi->image->flags) { - DBG("Applying background"); - uns flags = rdi->image->flags & ~IMAGE_ALPHA; - if (!(rdi->need_transformations = (flags ^ io->flags) & (IMAGE_NEW_FLAGS & ~IMAGE_PIXELS_ALIGNED))) - flags = io->flags; - struct image *img = image_new(io->context, io->cols, io->rows, flags, rdi->need_transformations ? NULL : io->pool); + struct image *img = image_new(io->context, io->cols, io->rows, io->flags, io->pool); if (unlikely(!img)) { image_destroy(rdi->image); return 0; } - if (unlikely(!image_apply_background(io->context, img, rdi->image, &io->background_color))) + struct image_conv_options opt = image_conv_defaults; + opt.background = io->background_color; + if (unlikely(!image_conv(io->context, img, rdi->image, &opt))) { image_destroy(rdi->image); image_destroy(img); @@ -363,10 +362,6 @@ image_io_read_data_finish(struct image_io_read_data_internals *rdi, struct image image_destroy(rdi->image); rdi->image = img; } - - // FIXME: support for various color spaces - - ASSERT(!rdi->need_transformations); } /* Success */