Adrien Destugues f4bfaeca89 Add scripts to color-reduce pictures with constraints
Scripts for various Thomson machines, Oric and ZX. All the hard work of
Samuel Devulder, with extensive research on color palette reduction
algorithms, lots of testing, research and debugging.

Thanks a lot!
2017-03-21 21:48:39 +01:00

47 lines
1.2 KiB
Lua

-- ostro_mo5.lua : converts a color image into a
-- TO9 image (320x200x16 with color clashes)
-- using Ostromoukhov's error diffusion algorithm.
--
-- Version: 02-jan-2017
--
-- Copyright 2016-2017 by Samuel Devulder
--
-- This program is free software; you can redistribute
-- it and/or modify it under the terms of the GNU
-- General Public License as published by the Free
-- Software Foundation; version 2 of the License.
-- See <http://www.gnu.org/licenses/>
run('lib/ostromoukhov.lua')
run('lib/color_reduction.lua')
OstroDither:new():dither40cols(function(w,h,getLinearPixel)
local c16 = h==200 and w==320
for y=0,h-1 do
for x=0,w-1 do
if getbackuppixel(x,y)>15 then c16 = false end
end
end
local pal
if c16 then
pal = {}
for i=0,15 do
local r,g,b=getbackupcolor(i)
r = thomson.levels.pc2to[r]
g = thomson.levels.pc2to[g]
b = thomson.levels.pc2to[b]
pal[i+1] = r+g*16+b*256-273
end
else
pal=ColorReducer:new():analyzeWithDither(w,h,
getLinearPixel,
function(y)
thomson.info("Building palette...",math.floor(y*100/h),"%")
end):boostBorderColors():buildPalette(16)
end
thomson.palette(0, pal)
return pal
end)