diff options
author | ubq323 <ubq323@ubq323.website> | 2022-12-31 04:00:32 +0000 |
---|---|---|
committer | ubq323 <ubq323@ubq323.website> | 2022-12-31 04:00:32 +0000 |
commit | b80ac71d55c6d782f0b8272ee232f7ea10c71528 (patch) | |
tree | 6f0715d9d7dbed9bcb987a4ceaa1e112bfb1b283 | |
parent | 5f227122324816312620dbe9a0a5ac336591c504 (diff) |
3d print of image
-rw-r--r-- | img/blahaj.ppm | bin | 0 -> 2896 bytes | |||
-rw-r--r-- | img/print.lua | 52 |
2 files changed, 52 insertions, 0 deletions
diff --git a/img/blahaj.ppm b/img/blahaj.ppm Binary files differnew file mode 100644 index 0000000..ffdb895 --- /dev/null +++ b/img/blahaj.ppm diff --git a/img/print.lua b/img/print.lua new file mode 100644 index 0000000..f6bcef7 --- /dev/null +++ b/img/print.lua @@ -0,0 +1,52 @@ +package.path="/?;/?.lua;"..package.path + +local printer = peripheral.wrap"right" + +local load_pnm = require"load_pnm".load +local file,err = io.open(arg[1],"rb") +if err then error("io.open: "..err) end +local ff = file:read("a") +local img = load_pnm(ff) +local W,H = img.width, img.height + +local function c2c(col) + local r = math.floor(col[1]*255) + local g = math.floor(col[2]*255) + local b = math.floor(col[3]*255) + return b + 0x100*g + 0x10000*r +end + +local function print_tile(tilex,tiley) + local tilex0 = tilex-1 + local tiley0 = tiley-1 + local xm = (8*tilex0)+1 + local ym = (8*tiley0)+1 + local xM = math.min(W,xm+7) + local yM = math.min(H,ym+7) + + -- really i should have called this u and v instead of x and y. joker emoji + printer.reset() + shapes = {} + for px = xm,xM do + for py = ym,yM do + local offx = px-xm + local offy = py-ym + table.insert(shapes,{ + 2*offx, 14-2*offy, 15, + 2*offx+2, 16-2*offy, 16, + texture="sc-peripherals:block/white", + tint=c2c(img[py][px]) + }) + end + end + printer.addShapes(shapes) + printer.setTooltip("("..tilex..","..tiley..")") + +end + +-- 0... +for tilex = 1, math.ceil(W/8) do + for tiley = 1, math.ceil(H/8) do + print_tile(tilex,tiley) + end +end |