Lua: finished inputbox with negative and decimal inputs. Added to the repository more than 20(!) new scripts by DawnBringer
git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1357 416bcca6-2ee7-4201-b75f-2eb2f807beb1
This commit is contained in:
164
scripts/pal_db_ExpandColors.lua
Normal file
164
scripts/pal_db_ExpandColors.lua
Normal file
@@ -0,0 +1,164 @@
|
||||
--PALETTE: Expand Colors v1.0
|
||||
--by Richard Fhager
|
||||
--http://hem.fyristorg.com/dawnbringer/
|
||||
-- Email: dawnbringer@hem.utfors.se
|
||||
-- MSN: annassar@hotmail.com
|
||||
--
|
||||
--
|
||||
-- Continously fill the greatest void in the area of the color-cube enclosed by (or along ramps of) initial colors
|
||||
-- This algorithm will create lines of allowed colors (all ranges) in 3d colorspace and the pick
|
||||
-- new colors from the most void areas (on any line). Almost like a Median-cut in reverse.
|
||||
--
|
||||
-- Rather than filling the colorcube symmetrically it adds intermediate colors to the existing ones.
|
||||
--
|
||||
-- Running this script on the C64 16-color palette might be educational
|
||||
--
|
||||
--
|
||||
-- Source cols#, Expand to #,
|
||||
-- Ex: 15-31 means that palette colors 0-15 is expanded to 16 new colors placed at slots 16-31
|
||||
--
|
||||
-- Spread mode: OFF - New colors will conform to the contrast & saturation of original colors
|
||||
-- (new colors will stay on the ramps possible from the original colors)
|
||||
--
|
||||
-- ON - New colors will expand their variance by each new addition (mostly notable when adding many new colors)
|
||||
-- Will add range lines/ramps to all new colors from old ones, but keep within max/min values of the
|
||||
-- original colors. 15-bit mode will dampen the spread towards extreme colors (if starting with low contrast)
|
||||
--
|
||||
-- 15-bit colors: Higher color-resolution, 32768 possible colors rather than the 4096 of 12bit. Slower but perhaps better.
|
||||
--
|
||||
|
||||
SHADES = 16 -- Going 24bit will probably be too slow and steal too much memory, so start with 12bit (4096 colors) for now
|
||||
|
||||
ini = 0
|
||||
exp = 255
|
||||
|
||||
OK,ini,exp,linemode,fbit = inputbox("Expand Colors (0-255):",
|
||||
"Source Cols #: 1-254", 15, 1,254,0,
|
||||
"Expand to #: 2-255", 31, 2,255,0,
|
||||
"Spread mode", 0, 0,1,0,
|
||||
"15-bit colors (slow)", 0, 0,1,0
|
||||
);
|
||||
|
||||
if (fbit == 1) then SHADES = 32; end
|
||||
|
||||
|
||||
|
||||
function initColorCube(sha)
|
||||
ary = {}
|
||||
for z = 0, sha-1, 1 do
|
||||
ary[z+1] = {}
|
||||
for y = 0, sha-1, 1 do
|
||||
ary[z+1][y+1] = {}
|
||||
for x = 0, sha-1, 1 do
|
||||
ary[z+1][y+1][x+1] = {false,0}
|
||||
end
|
||||
end
|
||||
end
|
||||
return ary
|
||||
end
|
||||
|
||||
-- Gravity model (think of colors as stars of equal mass/brightness in a 3d space)
|
||||
function addColor2Cube(cube,sha,r,g,b)
|
||||
star = 1000000
|
||||
fade = 1000
|
||||
|
||||
cube[r+1][g+1][b+1] = {false,star}
|
||||
|
||||
for z = 0, sha-1, 1 do
|
||||
for y = 0, sha-1, 1 do
|
||||
for x = 0, sha-1, 1 do
|
||||
|
||||
d = fade / ( (x-b)^2 + (y-g)^2 + (z-r)^2 )
|
||||
|
||||
cube[z+1][y+1][x+1][2] = cube[z+1][y+1][x+1][2] + d
|
||||
|
||||
end;end;end
|
||||
end
|
||||
|
||||
|
||||
-- Create new allowed colorlines in colorspace (ramps from which colors can be picked)
|
||||
function enableRangeColorsInCube(cube,sha,r1,g1,b1,r2,g2,b2)
|
||||
|
||||
local div,r,g,b
|
||||
div = 256 / sha
|
||||
rs = (r2 - r1) / sha / div
|
||||
gs = (g2 - g1) / sha / div
|
||||
bs = (b2 - b1) / sha / div
|
||||
|
||||
for n = 0, sha-1, 1 do
|
||||
|
||||
r = math.floor(r1/div + rs * n)
|
||||
g = math.floor(g1/div + gs * n)
|
||||
b = math.floor(b1/div + bs * n)
|
||||
|
||||
cube[r+1][g+1][b+1][1] = true
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
function findVoid(cube,sha)
|
||||
weakest = 999999999999
|
||||
weak_i = {-1,-1,-1}
|
||||
for z = 0, sha-1, 1 do
|
||||
for y = 0, sha-1, 1 do
|
||||
for x = 0, sha-1, 1 do
|
||||
|
||||
c = cube[z+1][y+1][x+1]
|
||||
if c[1] == true then
|
||||
w = c[2]
|
||||
if w <= weakest then weakest = w; weak_i = {z,y,x}; end
|
||||
end
|
||||
|
||||
end;end;end
|
||||
return weak_i[1],weak_i[2],weak_i[3]
|
||||
end
|
||||
|
||||
--
|
||||
|
||||
if OK == true then
|
||||
|
||||
cube = initColorCube(SHADES)
|
||||
|
||||
-- Define allowed colorspace
|
||||
for y = 0, ini-1, 1 do
|
||||
r1,g1,b1 = getcolor(y)
|
||||
for x = y+1, ini, 1 do
|
||||
r2,g2,b2 = getcolor(x)
|
||||
enableRangeColorsInCube(cube,SHADES,r1,g1,b1,r2,g2,b2)
|
||||
end
|
||||
end
|
||||
|
||||
div = 256 / SHADES
|
||||
|
||||
-- Fill cube with initial colors
|
||||
for n = 0, ini, 1 do
|
||||
r,g,b = getcolor(n)
|
||||
addColor2Cube(cube,SHADES,math.floor(r/div),math.floor(g/div),math.floor(b/div))
|
||||
end
|
||||
|
||||
|
||||
for n = ini+1, exp, 1 do
|
||||
r,g,b = findVoid(cube,SHADES)
|
||||
|
||||
if (r == -1) then messagebox("Report:","No more colors can be found, exit at "..n); break; end
|
||||
|
||||
mult = 255 / (SHADES - 1)
|
||||
setcolor(n, r*mult,g*mult,b*mult)
|
||||
|
||||
if linemode == 1 then
|
||||
-- Add lines from new color to all old
|
||||
for x = 0, n-1, 1 do
|
||||
r2,g2,b2 = getcolor(x)
|
||||
enableRangeColorsInCube(cube,SHADES,r*mult,g*mult,b*mult,r2,g2,b2) -- uses 24bit values rgb
|
||||
end
|
||||
end
|
||||
|
||||
addColor2Cube(cube,SHADES,r,g,b) -- rgb is in 'shade' format here
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user