obj.getpixeldata
code:Lua
table:
引数 型 説明
... string オプションを適用したいときに列挙する
戻り値1 userdata 画像データ
戻り値2 number 画像の幅
戻り値3 number 画像の高さ
概要
現在のオブジェクトのBGRA画像データを返す
optionには,"work"と"alloc"の2種類を入れる
"alloc" ― フルユーザデータを確保 開放はLuaのガベージコレクションが行う
"work" ― 画像と同じサイズのバッファを用意する
table:詳細
"alloc" "work" 挙動
false true 拡張編集が使っているテンポラリ領域を返す
false false 拡張編集が使っているテンポラリ領域に、現在のオブジェクトのイメージをコピーして返す
true true オブジェクトの画像データが格納できる大きさのフルユーザーデータを確保し、返す
true false オブジェクトの画像データが格納できる大きさのフルユーザーデータを確保し、現在のオブジェクトのイメージをコピーして返す
obj.getpixeldata()とobj.getpixeldata("work")で得られる画像データのメモリ領域は互いに重なっていない
画像データは以下のような構造体の配列になっている
code:cpp
struct PixelBGRA {
uint8_t b,g,r,a;
};
例えば左から7番目・上から4番目のピクセルを取得するには data[6+3*w]とする(0-indexed)
使用例
1.
code:Lua
local ffi=require"ffi"
ffi.cdef[[
typedef struct { uint8_t b,g,r,a; } PixelBGRA;
]]
local d,w,h=obj.getpixeldata()
local cd=ffi.cast("PixelBGRA*",d)
for y=0,h-1 do for x=0,w-1 do
p.b=255-p.b
p.g=255-p.g
p.r=255-p.r
end end
obj.putpixeldata(d)
輝度と色相を反転する
2.
code:lua
local mymodule=require"mymodule"
local work,data,w,h=obj.getpixeldata"work",obj.getpixeldata()
mymodule.func(data,work,w,h)
obj.putpixeldata(work)
code:mymodule.cpp
int func(lua_State* L) {
PixelBGRA* data=lua_touserdata(L,1);
PixelBGRA* work=lua_touserdata(L,2);
int w=lua_tointeger(L,3);
int h=lua_tointeger(L,4);
for(int y=0;y<h;y++){
for(int x=0;x<w;x++){
}
}
return 0;
}
// (luaopen_mymodule 省略)
オブジェクトを180度回転(上下左右反転)する
関連項目