mirror of
https://github.com/aseprite/aseprite.git
synced 2024-09-03 05:29:13 +00:00
202 lines
6.3 KiB
Lua
202 lines
6.3 KiB
Lua
-- Copyright (C) 2019-2022 Igara Studio S.A.
|
|
--
|
|
-- This file is released under the terms of the MIT license.
|
|
-- Read LICENSE.txt for more information.
|
|
|
|
dofile("./test_utils.lua")
|
|
|
|
local rgba = app.pixelColor.rgba
|
|
|
|
----------------------------------------------------------------------
|
|
-- app.command.ColorQuantization
|
|
|
|
do
|
|
-- One sprite with a background layer
|
|
local s = Sprite(2, 2)
|
|
app.command.BackgroundFromLayer()
|
|
|
|
local i = s.cels[1].image
|
|
local p = s.palettes[1]
|
|
assert(#p == 256)
|
|
assert(s.colorMode == ColorMode.RGB)
|
|
app.command.ColorQuantization{ algorithm="rgb5a3" }
|
|
assert(#p == 1)
|
|
|
|
array_to_pixels({ rgba(255, 255, 0), rgba(255, 255, 0),
|
|
rgba(255, 255, 0), rgba(255, 255, 0) }, i)
|
|
app.command.ColorQuantization{ algorithm="rgb5a3" }
|
|
assert(#p == 1)
|
|
assert(p:getColor(0) == Color(255, 255, 0))
|
|
|
|
array_to_pixels({ rgba(255, 0, 0), rgba(255, 0, 0),
|
|
rgba(255, 255, 0), rgba(255, 255, 0) }, i)
|
|
app.command.ColorQuantization{ algorithm="rgb5a3" }
|
|
assert(#p == 2)
|
|
assert(p:getColor(0) == Color(255, 0, 0))
|
|
assert(p:getColor(1) == Color(255, 255, 0))
|
|
|
|
array_to_pixels({ rgba(255, 0, 0), rgba(255, 0, 0),
|
|
rgba(255, 255, 0), rgba(0, 0, 255) }, i)
|
|
app.command.ColorQuantization{ algorithm="rgb5a3" }
|
|
assert(#p == 3)
|
|
assert(p:getColor(0) == Color(255, 0, 0))
|
|
assert(p:getColor(1) == Color(255, 255, 0))
|
|
assert(p:getColor(2) == Color(0, 0, 255))
|
|
|
|
-- Convert the background layer to a transparent layer
|
|
|
|
app.command.LayerFromBackground()
|
|
app.command.ColorQuantization{ algorithm="rgb5a3", withAlpha=false }
|
|
assert(#p == 4) -- One extra color for transparent layer
|
|
assert(p:getColor(0) == Color(0, 0, 0))
|
|
assert(p:getColor(1) == Color(255, 0, 0))
|
|
assert(p:getColor(2) == Color(255, 255, 0))
|
|
assert(p:getColor(3) == Color(0, 0, 255))
|
|
|
|
app.command.ColorQuantization()
|
|
assert(#p == 4)
|
|
assert(p:getColor(0) == Color(0, 0, 0, 0))
|
|
assert(p:getColor(1) == Color(255, 0, 0))
|
|
assert(p:getColor(2) == Color(255, 255, 0))
|
|
assert(p:getColor(3) == Color(0, 0, 255))
|
|
|
|
array_to_pixels({ rgba(0, 0, 0), rgba(255, 0, 0),
|
|
rgba(255, 0, 0), rgba(0, 0, 255) }, i)
|
|
app.command.ColorQuantization{ algorithm="rgb5a3", withAlpha=false }
|
|
assert(#p == 4)
|
|
assert(p:getColor(0) == Color(0, 0, 0))
|
|
assert(p:getColor(1) == Color(0, 0, 0))
|
|
assert(p:getColor(2) == Color(255, 0, 0))
|
|
assert(p:getColor(3) == Color(0, 0, 255))
|
|
|
|
app.command.ColorQuantization{ algorithm="rgb5a3" }
|
|
assert(#p == 4)
|
|
assert(p:getColor(0) == Color(0, 0, 0, 0))
|
|
assert(p:getColor(1) == Color(0, 0, 0))
|
|
assert(p:getColor(2) == Color(255, 0, 0))
|
|
assert(p:getColor(3) == Color(0, 0, 255))
|
|
end
|
|
|
|
do
|
|
-- One sprite with a transparent layer + a background layer
|
|
local s = Sprite(2, 2)
|
|
local p = s.palettes[1]
|
|
app.command.BackgroundFromLayer()
|
|
local bg = s.cels[1].image
|
|
local fg = s:newCel(s:newLayer(), 1).image
|
|
|
|
assert(#s.frames == 1)
|
|
assert(#s.layers == 2)
|
|
assert(#s.cels == 2)
|
|
|
|
array_to_pixels({ rgba(0, 0, 0, 0), rgba(0, 255, 0),
|
|
rgba(255, 0, 0), rgba(0, 0, 0, 0) }, fg)
|
|
array_to_pixels({ rgba(0, 0, 0), rgba(0, 0, 0),
|
|
rgba(0, 0, 0), rgba(0, 0, 255) }, bg)
|
|
|
|
app.command.ColorQuantization{ algorithm="rgb5a3" }
|
|
assert(#p == 5)
|
|
assert(p:getColor(0) == Color(0, 0, 0, 0))
|
|
assert(p:getColor(1) == Color(0, 0, 0))
|
|
assert(p:getColor(2) == Color(0, 255, 0))
|
|
assert(p:getColor(3) == Color(255, 0, 0))
|
|
assert(p:getColor(4) == Color(0, 0, 255))
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- app.command.ChangePixelFormat
|
|
|
|
do
|
|
local s = Sprite(2, 2, ColorMode.RGB)
|
|
local p = Palette(4)
|
|
p:setColor(0, Color(0, 0, 0))
|
|
p:setColor(1, Color(101, 90, 200))
|
|
p:setColor(2, Color(102, 91, 201))
|
|
p:setColor(3, Color(103, 92, 203))
|
|
s:setPalette(p)
|
|
|
|
app.command.BackgroundFromLayer()
|
|
|
|
local bg = s.cels[1].image
|
|
array_to_pixels({ rgba(0, 0, 0), rgba(101, 90, 200),
|
|
rgba(102, 91, 201), rgba(103, 92, 203) }, bg)
|
|
|
|
app.command.ChangePixelFormat{ format="indexed", rgbmap="rgb5a3" }
|
|
-- Using the 5-bit precision of RGB5A3 will match everything with
|
|
-- the first palette entry.
|
|
bg = s.cels[1].image
|
|
expect_img(bg, { 0, 1,
|
|
1, 1 })
|
|
app.undo()
|
|
|
|
app.command.ChangePixelFormat{ format="indexed", rgbmap="octree" }
|
|
bg = s.cels[1].image
|
|
expect_img(bg, { 0, 1,
|
|
2, 3 })
|
|
app.undo()
|
|
|
|
p:setColor(0, Color(0, 0, 0, 0))
|
|
bg = s.cels[1].image
|
|
array_to_pixels({ rgba(101, 90, 200, 0), rgba(101, 90, 200),
|
|
rgba(102, 91, 201), rgba(103, 92, 203, 0) }, bg)
|
|
app.command.ChangePixelFormat{ format="indexed", rgbmap="octree" }
|
|
bg = s.cels[1].image
|
|
expect_img(bg, { 0, 1,
|
|
2, 0 })
|
|
|
|
end
|
|
|
|
----------------------------------------------------------------------
|
|
-- Tests for issue aseprite/aseprite#3207
|
|
-- Conversion RGB to INDEXED color mode, in transparent layers, always
|
|
-- picks index 0 as transparent color, even if the mask color is present
|
|
-- in the palette.
|
|
|
|
do
|
|
local s = Sprite(2, 3, ColorMode.RGB)
|
|
local p = Palette(4)
|
|
p:setColor(0, Color(0, 0, 0))
|
|
p:setColor(1, Color(255, 0, 0))
|
|
p:setColor(2, Color(0, 0, 0, 0))
|
|
p:setColor(3, Color(0, 255, 0))
|
|
s:setPalette(p)
|
|
|
|
local bg = s.cels[1].image
|
|
array_to_pixels({ rgba(0, 0, 0),rgba(255, 0, 0),
|
|
rgba(255, 0, 0), rgba(0, 0, 0, 0),
|
|
rgba(0, 0, 0, 0), rgba(0, 0, 0, 0), }, bg)
|
|
|
|
app.command.ChangePixelFormat{ format="indexed", rgbmap="rgb5a3" }
|
|
-- Using the 5-bit precision of RGB5A3 will match everything with
|
|
-- the first palette entry.
|
|
bg = s.cels[1].image
|
|
expect_img(bg, { 0, 1,
|
|
1, 2,
|
|
2, 2 })
|
|
app.undo()
|
|
|
|
app.command.ChangePixelFormat{ format="indexed", rgbmap="octree" }
|
|
bg = s.cels[1].image
|
|
expect_img(bg, { 0, 1,
|
|
1, 2,
|
|
2, 2 })
|
|
app.undo()
|
|
|
|
p:setColor(2, Color(0, 0, 255))
|
|
s:setPalette(p)
|
|
bg = s.cels[1].image
|
|
|
|
app.command.ChangePixelFormat{ format="indexed", rgbmap="rgb5a3" }
|
|
bg = s.cels[1].image
|
|
expect_img(bg, { 2, 1,
|
|
1, 0,
|
|
0, 0 })
|
|
app.undo()
|
|
|
|
app.command.ChangePixelFormat{ format="indexed", rgbmap="octree" }
|
|
bg = s.cels[1].image
|
|
expect_img(bg, { 2, 1,
|
|
1, 0,
|
|
0, 0 })
|
|
end
|