From f895938dbb9718bc46ce79e9f4996799dfdf424f Mon Sep 17 00:00:00 2001 From: David Capello Date: Tue, 1 Nov 2016 19:02:11 -0300 Subject: [PATCH] Fix adding a reference layer with a different color mode --- src/app/commands/cmd_new_layer.cpp | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/src/app/commands/cmd_new_layer.cpp b/src/app/commands/cmd_new_layer.cpp index 6aff9ca9c..5bb70ea32 100644 --- a/src/app/commands/cmd_new_layer.cpp +++ b/src/app/commands/cmd_new_layer.cpp @@ -24,6 +24,7 @@ #include "doc/layer.h" #include "doc/primitives.h" #include "doc/sprite.h" +#include "render/quantization.h" #include "render/render.h" #include "ui/ui.h" @@ -247,14 +248,33 @@ void NewLayerCommand::onExecute(Context* context) // Paste the given sprite as flatten for (frame_t fr=0; fr<=pasteSpr->lastFrame(); ++fr) { - ImageRef pasteImage(Image::create(sprite->pixelFormat(), - pasteSpr->width(), - pasteSpr->height())); + ImageRef pasteImage( + Image::create( + pasteSpr->pixelFormat(), + pasteSpr->width(), + pasteSpr->height())); clear_image(pasteImage.get(), pasteSpr->transparentColor()); render.renderSprite(pasteImage.get(), pasteSpr, fr); frame_t dstFrame = writer.frame()+fr; + + if (sprite->pixelFormat() != pasteSpr->pixelFormat() || + sprite->pixelFormat() == IMAGE_INDEXED) { + ImageRef pasteImageConv( + render::convert_pixel_format( + pasteImage.get(), + nullptr, + sprite->pixelFormat(), + DitheringMethod::NONE, + sprite->rgbMap(dstFrame), + pasteSpr->palette(fr), + (pasteSpr->backgroundLayer() ? true: false), + sprite->transparentColor())); + if (pasteImageConv) + pasteImage = pasteImageConv; + } + Cel* cel = layer->cel(dstFrame); if (cel) { api.replaceImage(sprite, cel->imageRef(), pasteImage);