QRCode-Extension/main/main.script
2018-05-04 19:48:29 +02:00

158 lines
4.7 KiB
Plaintext

local function start_scan(self)
if camera ~= nil then
local sysinfo = sys.get_sys_info()
local quality = camera.CAPTURE_QUALITY_HIGH
local type = camera.CAMERA_TYPE_FRONT
self.flip = 0
if sysinfo.system_name == 'iPhone OS' then
type = camera.CAMERA_TYPE_BACK
quality = camera.CAPTURE_QUALITY_MEDIUM
self.flip = 1
end
if camera.start_capture(type, quality) then
self.cameraframe = camera.get_frame()
self.camerainfo = camera.get_info()
print("Initialized camera")
self.cameratextureheader = {width=self.camerainfo.width,
height=self.camerainfo.height,
type=resource.TEXTURE_TYPE_2D,
format=resource.TEXTURE_FORMAT_RGB,
num_mip_maps=1 }
end
else
print("could not start camera capture")
end
end
local function end_scan(self)
if self.cameraframe ~= nil then
self.cameraframe = nil
camera.stop_capture()
self.first = 0
end
end
local function update_scan(self)
if self.cameraframe ~= nil then
local texturepath = go.get("#sprite", "texture0")
resource.set_texture(texturepath, self.cameratextureheader, self.cameraframe)
local text = qrcode.scan(self.cameraframe, self.camerainfo.width, self.camerainfo.height, self.flip)
if text ~= nil then
msg.post("gui", "set_text", {text=text})
end_scan(self)
return
end
end
end
local function rescale_texture_old(src_buf, src_size, dst_buf, dst_size)
local src = buffer.get_stream(src_buf, hash("rgb"))
local dst = buffer.get_stream(dst_buf, hash("rgb"))
print("src", src_size, src_size, src_size*src_size*3)
print("dst", dst_size, dst_size, dst_size*dst_size*3)
for dy=0,dst_size-1 do
local v = dy / dst_size
for dx=0,dst_size-1 do
local u = dx / dst_size
local dst_index = (dy * dst_size + dx) * 3 + 1
local src_index = (math.floor(v * src_size) * src_size + math.floor(u * src_size)) * 3 + 1
print(dx, dy, dst_index, src_index)
dst[dst_index + 0] = src[src_index + 0]
dst[dst_index + 1] = src[src_index + 1]
dst[dst_index + 2] = src[src_index + 2]
end
end
end
local function rescale_texture(src_buf, src_size, dst_buf, dst_size)
local src = buffer.get_stream(src_buf, hash("rgb"))
local dst = buffer.get_stream(dst_buf, hash("rgb"))
print("src", src_size, src_size, src_size*src_size*3)
print("dst", dst_size, dst_size, dst_size*dst_size*3)
for dy=0,dst_size-1 do
local v = dy / dst_size
for dx=0,dst_size-1 do
local u = dx / dst_size
local dst_index = (dy * dst_size + dx) * 3 + 1
local src_index = (math.floor(v * src_size) * src_size + math.floor(u * src_size)) * 3 + 1
print(dx, dy, dst_index, src_index)
dst[dst_index + 0] = src[src_index + 0]
dst[dst_index + 1] = src[src_index + 1]
dst[dst_index + 2] = src[src_index + 2]
end
end
end
local function generate_qrcode(self, text)
local qrcode, qrsize = qrcode.generate(text)
local qrcodetextureheader = {width=qrsize,
height=qrsize,
type=resource.TEXTURE_TYPE_2D,
format=resource.TEXTURE_FORMAT_LUMINANCE,
num_mip_maps=1 }
local texturepath = go.get("#sprite", "texture0")
resource.set_texture(texturepath, qrcodetextureheader, qrcode)
end
function init(self)
local logosize = 256
local screen_width = sys.get_config("display.width", 600)
local screen_height = sys.get_config("display.height", 800)
local scale_width = screen_width / logosize
local scale_height = screen_height / logosize
go.set("#sprite", "scale", vmath.vector3(scale_width, scale_height, 1) )
start_scan(self)
if qrcode == nil then
print("could not find qrcode module")
end
self.mode = "SCAN"
end
function final(self)
end_scan(self)
end
function update(self, dt)
if self.mode == "SCAN" then
update_scan(self)
end
end
function on_input(self, action_id, action)
if action_id == hash("click") or action_id == hash("touch") then
print("foo")
end
end
function on_message(self, message_id, message)
if self.mode ~= message.mode then
if message.mode == "SCAN" then
start_scan(self)
pprint(self.cameraframe)
else
end_scan(self)
generate_qrcode(self, message.text)
end
self.mode = message.mode
end
end