diff options
-rw-r--r-- | img/load_pnm.dat | 1 | ||||
-rw-r--r-- | img/load_pnm.lua | 34 | ||||
-rw-r--r-- | util.lua | 7 |
3 files changed, 42 insertions, 0 deletions
diff --git a/img/load_pnm.dat b/img/load_pnm.dat new file mode 100644 index 0000000..38e1154 --- /dev/null +++ b/img/load_pnm.dat @@ -0,0 +1 @@ +dep util diff --git a/img/load_pnm.lua b/img/load_pnm.lua new file mode 100644 index 0000000..60cac8a --- /dev/null +++ b/img/load_pnm.lua @@ -0,0 +1,34 @@ +local perr = require("util").perr + +local function load_p1(fname) + + local file,err = fs.open(fname,"r") + perr(err,"fs.open") + local imgf = file.readAll() + --print(img) + assert(imgf:sub(1,2) == "P1","only P1 images are supported at the moment") + local width,height, cur = imgf:match("%s*(%d+)%s*(%d+)%s*()",3) + assert(width,"couldn't find image header") + + local img=setmetatable({},{__index=function(t,k) + if type(k) ~= "number" then return nil end + local r = {} + rawset(t,k,r) + return r + end}) + + -- img[y][x]. 1,1 is top left + for row=1,height do + for col =1,width do + local val,ncur = imgf:match("(%d+)%s*()",cur) + cur = ncur + img[row][col] = tonumber(val) + end + end + + img.width=width + img.height=height + return img +end + +return load_p1 diff --git a/util.lua b/util.lua new file mode 100644 index 0000000..109ac67 --- /dev/null +++ b/util.lua @@ -0,0 +1,7 @@ +local function perr(err,what) + if err then error(what..": "..err) end +end + +return { + perr=perr, +} |