From 5f18e965711a4656bfbfdd278ef8fea3d96f95a5 Mon Sep 17 00:00:00 2001 From: ubq323 Date: Fri, 5 Aug 2022 02:38:08 +0100 Subject: paletteeeee --- img/shitty_disp.lua | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 90 insertions(+), 1 deletion(-) (limited to 'img/shitty_disp.lua') diff --git a/img/shitty_disp.lua b/img/shitty_disp.lua index f5ebfb9..3f060d9 100644 --- a/img/shitty_disp.lua +++ b/img/shitty_disp.lua @@ -6,7 +6,7 @@ local function color_dist(c1,c2) return total end -function closest_palette_color(R,c) +local function closest_palette_color(R,c) local closest = nil local closest_dist = 99999999 for i=0,15 do @@ -20,6 +20,93 @@ function closest_palette_color(R,c) return closest end +local function average_color(pxlist) + local count = #pxlist + local tr,tg,tb = 0,0,0 + for _,px in ipairs(pxlist) do + tr = tr + px[1] + tg = tg + px[2] + tb = tb + px[3] + end + return {tr/count,tg/count,tb/count} +end + +local function sortby_r(pxlist) table.sort(pxlist,function(a,b) return a[1] rangeg then + if ranger > rangeb then + -- red + sortby_r(pxlist) + else + -- blue + sortby_b(pxlist) + end + else + if rangeg > rangeb then + -- green + sortby_g(pxlist) + else + -- blue + sortby_b(pxlist) + end + end + local count = #pxlist + local hcount = math.floor(count/2) + + local lhalf,uhalf = {},{} + table.move(pxlist, 1,hcount, 1, lhalf) + table.move(pxlist, hcount+1,count, 1, uhalf) + + local lcols = median_cut(lhalf,remaining-1) + local ucols = median_cut(uhalf,remaining-1) + + return table.move(ucols,1,#ucols,#lcols+1,lcols) +end + +local function reset_palette(R) + for i=0,15 do + local cx = 2^i + R.setPaletteColor(cx,R.nativePaletteColor(cx)) + end +end + +local function improve_palette(R,img,w,h,imgx,imgy) + local pxlist = {} + local idx=1 + for px=imgx,imgx+w-1 do + for py=imgy,imgy+h-1 do + pxlist[idx] = img[py][px] + idx = idx + 1 + end + end + local palette = median_cut(pxlist) + assert(#palette==16,#palette.." doesn't equal 16") + for i=0,15 do + local pc = palette[i+1] + R.setPaletteColor(2^i,table.unpack(pc)) + end +end + + local function disp(R,img,scrx,scry,w,h,imgx,imgy) scrx = scrx or 1 @@ -29,6 +116,8 @@ local function disp(R,img,scrx,scry,w,h,imgx,imgy) imgx = imgx or 1 imgy = imgy or 1 + improve_palette(R,img,w,h,imgx,imgy) + for offx=0,w-1 do for offy=0,h-1 do R.setCursorPos(scrx+offx,scry+offy) -- cgit v1.2.3