mirror of
https://github.com/aseprite/aseprite.git
synced 2025-02-20 18:40:57 +00:00
Fix adding a reference layer with a different color mode
This commit is contained in:
parent
21b6e8716d
commit
f895938dbb
@ -24,6 +24,7 @@
|
|||||||
#include "doc/layer.h"
|
#include "doc/layer.h"
|
||||||
#include "doc/primitives.h"
|
#include "doc/primitives.h"
|
||||||
#include "doc/sprite.h"
|
#include "doc/sprite.h"
|
||||||
|
#include "render/quantization.h"
|
||||||
#include "render/render.h"
|
#include "render/render.h"
|
||||||
#include "ui/ui.h"
|
#include "ui/ui.h"
|
||||||
|
|
||||||
@ -247,14 +248,33 @@ void NewLayerCommand::onExecute(Context* context)
|
|||||||
|
|
||||||
// Paste the given sprite as flatten
|
// Paste the given sprite as flatten
|
||||||
for (frame_t fr=0; fr<=pasteSpr->lastFrame(); ++fr) {
|
for (frame_t fr=0; fr<=pasteSpr->lastFrame(); ++fr) {
|
||||||
ImageRef pasteImage(Image::create(sprite->pixelFormat(),
|
ImageRef pasteImage(
|
||||||
pasteSpr->width(),
|
Image::create(
|
||||||
pasteSpr->height()));
|
pasteSpr->pixelFormat(),
|
||||||
|
pasteSpr->width(),
|
||||||
|
pasteSpr->height()));
|
||||||
clear_image(pasteImage.get(),
|
clear_image(pasteImage.get(),
|
||||||
pasteSpr->transparentColor());
|
pasteSpr->transparentColor());
|
||||||
render.renderSprite(pasteImage.get(), pasteSpr, fr);
|
render.renderSprite(pasteImage.get(), pasteSpr, fr);
|
||||||
|
|
||||||
frame_t dstFrame = writer.frame()+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);
|
Cel* cel = layer->cel(dstFrame);
|
||||||
if (cel) {
|
if (cel) {
|
||||||
api.replaceImage(sprite, cel->imageRef(), pasteImage);
|
api.replaceImage(sprite, cel->imageRef(), pasteImage);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user