How to manipulate Images in LUA Scripts
BlitzMax Forums/BlitzMax Programming/How to manipulate Images in LUA Scripts
| ||
| Hi to all, I'm using LUA with Blitzmax to implement a luaplayer.. but when I´ll try to implement the image layer i´m having some troubles .. here´s my code:
'---------------------------------------------------------------------------------
SuperStrict
Import brl.max2d
Local L:Byte Ptr
L=luaL_newstate()
luaL_openlibs(L)
Function LUA_INIT_SCREEN( L:Byte Ptr )
Local resWidth :Int = luaL_checkinteger(L, 1)
Local resHeight:Int = luaL_checkinteger(L, 2)
Graphics resWidth , resHeight
EndFunction
Function LUA_LOAD_IMAGE:Int (L:Byte Ptr)
Local imageFile:String = luaL_checkstring(L,1)
Local imageObject:TImage
imageObject = LoadImage(imageFile)
lua_pushlightuserdata(L, imageObject)
EndFunction
Function LUA_DRAW_IMAGE:Int (L:Byte Ptr)
Local posX :Int = luaL_checkinteger(L,1)
Local posY :Int = luaL_checkinteger(L,2)
Local imageParameter :TImage = luaL_checkudata(L,3)
DrawImage(imageParameter,posX,posY,0)
End Function
lua_register(L, "INIT_SCREEN" , LUA_INIT_SCREEN)
lua_register(L, "LOAD_IMAGE" , LUA_LOAD_IMAGE)
lua_register(L, "DRAW_IMAGE" , LUA_DRAW_IMAGE)
Local strInitialization:String
strInitialization="dofile('main.lua')~n"
If luaL_dostring(L,strInitialization)
Print "Error: "+lua_tostring(L,-1)
Else
Print "Everything is fine."
EndIf
lua_close(L)
The LUA script is:
-- -----------------------------------------------------------------------
-- main.lua
INIT_SCREEN(640,480,32)
img = LOAD_IMAGE("image.png")
if tst == null then print "Error" end
for x=1,10000 do
for y=1,10000 do
end
end
Well.. the graphic windows open, the LOAD_IMAGE command execute, but the img variable in LUA are nill Anyone can give some help ? thanks |
| ||
You need to tell lua how many values this function will return.Function LUA_LOAD_IMAGE:Int (L:Byte Ptr) Local imageFile:String = luaL_checkstring(L,1) Local imageObject:TImage imageObject = LoadImage(imageFile) lua_pushlightuserdata(L, imageObject) return 1 'add this EndFunction However, your code still won't work, because imageObject will get collected as garbage some time later. Just try LUGI, it will save you a bunch of time. |
| ||
Thanks Tommo, now that I have load something in img variable in LUA, the probelm is to draw the image :) I don't understand how to get the img data im img variable to puit um a local TImage variable to draw the image:Function LUA_DRAW_IMAGE:Int (L:Byte Ptr) Local posX :Int = luaL_checkinteger(L,1) Local posY :Int = luaL_checkinteger(L,2) Local imgPointer:Byte Ptr = luaL_checkudata(L,3) DrawImage(imageParameter,posX,posY,0) End Function but when I´ll compile .. blitz give me a missing function parameter tname .. What´s LUGI ??? thks |
| ||
| What's LUGI ??? LuGI is the Lua interop module I wrote. It, in my opinion at least, greatly simplifies adding Lua bindings to most code, especially if you consider this while designing your code early on (although, as a decent example of late integration, the Leadwerks engine had LuGI working well not long after they started using it, so really all you need to do is design your code well in general). Documentation of sorts is in the wiki section of the project page. |