-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy patharray.lua
executable file
·35 lines (28 loc) · 952 Bytes
/
array.lua
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/usr/bin/luajit
-- turn a vips image into a lua array
local vips = require "vips"
local ffi = require "ffi"
-- make a tiny two band u16 image whose pixels are their coordinates
local im = vips.Image.xyz(3, 2):cast("ushort")
-- write as a C-style memory array, so band-interleaved, a series of scanlines
--
-- "data" is a pointer of type uchar*, though the underlying memory is really
-- pairs of int16s, see above
local data = im:write_to_memory()
-- the type of each pixel ... a pair of shorts
ffi.cdef [[
typedef struct {
unsigned short x;
unsigned short y;
} pixel;
]]
-- and cast the image pointer to a 1D array of pixel structs
local ptype = ffi.typeof("pixel*")
local array = ffi.cast(ptype, data)
-- and print! ffi arrays number from 0
for y = 0, im:height() - 1 do
for x = 0, im:width() - 1 do
local i = x + y * im:width()
print("x = ", x, "y = ", y, "value = ", array[i].x, array[i].y)
end
end