|
Packit Service |
2781ba |
/* This file is an image processing operation for GEGL
|
|
Packit Service |
2781ba |
*
|
|
Packit Service |
2781ba |
* GEGL is free software; you can redistribute it and/or
|
|
Packit Service |
2781ba |
* modify it under the terms of the GNU Lesser General Public
|
|
Packit Service |
2781ba |
* License as published by the Free Software Foundation; either
|
|
Packit Service |
2781ba |
* version 3 of the License, or (at your option) any later version.
|
|
Packit Service |
2781ba |
*
|
|
Packit Service |
2781ba |
* GEGL is distributed in the hope that it will be useful,
|
|
Packit Service |
2781ba |
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit Service |
2781ba |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit Service |
2781ba |
* Lesser General Public License for more details.
|
|
Packit Service |
2781ba |
*
|
|
Packit Service |
2781ba |
* You should have received a copy of the GNU Lesser General Public
|
|
Packit Service |
2781ba |
* License along with GEGL; if not, see <http://www.gnu.org/licenses/>.
|
|
Packit Service |
2781ba |
*
|
|
Packit Service |
2781ba |
* Copyright 2004, 2006 Øyvind Kolås <pippin@gimp.org>
|
|
Packit Service |
2781ba |
*/
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#include "config.h"
|
|
Packit Service |
2781ba |
#include <glib/gi18n-lib.h>
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#ifdef GEGL_CHANT_PROPERTIES
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#define THRESHOLD_SCRIPT \
|
|
Packit Service |
2781ba |
"level = user_value/2\n"\
|
|
Packit Service |
2781ba |
"for y=bound_y0, bound_y1 do\n"\
|
|
Packit Service |
2781ba |
" for x=bound_x0, bound_x1 do\n"\
|
|
Packit Service |
2781ba |
" v = get_value (x,y)\n"\
|
|
Packit Service |
2781ba |
" v = v + get_value (1, x,y)\n"\
|
|
Packit Service |
2781ba |
" if v>level then\n"\
|
|
Packit Service |
2781ba |
" v=1.0\n"\
|
|
Packit Service |
2781ba |
" else\n"\
|
|
Packit Service |
2781ba |
" v=0.0\n"\
|
|
Packit Service |
2781ba |
" end\n"\
|
|
Packit Service |
2781ba |
" set_value (x,y,v)\n"\
|
|
Packit Service |
2781ba |
" end\n"\
|
|
Packit Service |
2781ba |
" progress (y/height)\n"\
|
|
Packit Service |
2781ba |
"end"
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
gegl_chant_multiline (script, _("Script"), THRESHOLD_SCRIPT,
|
|
Packit Service |
2781ba |
_("The lua script containing the implementation of this operation."))
|
|
Packit Service |
2781ba |
gegl_chant_file_path (file, _("File"), "", _("a stored lua script on disk implementing an operation."))
|
|
Packit Service |
2781ba |
gegl_chant_double (user_value, _("User value"), -1000.0, 1000.0, 1.0,
|
|
Packit Service |
2781ba |
_("(appears in the global variable 'user_value' in lua."))
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#else
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#define GEGL_CHANT_TYPE_COMPOSER
|
|
Packit Service |
2781ba |
#define GEGL_CHANT_C_FILE "gluas.c"
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#include "gegl-chant.h"
|
|
Packit Service |
2781ba |
#include <lua.h>
|
|
Packit Service |
2781ba |
#include <lualib.h>
|
|
Packit Service |
2781ba |
#include <lauxlib.h>
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
typedef struct Priv
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gint bpp;
|
|
Packit Service |
2781ba |
GeglBuffer *in_drawable;
|
|
Packit Service |
2781ba |
GeglBuffer *aux_drawable;
|
|
Packit Service |
2781ba |
GeglBuffer *out_drawable;
|
|
Packit Service |
2781ba |
const Babl *rgba_float;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
gint bx1, by1;
|
|
Packit Service |
2781ba |
gint bx2, by2; /* mask bounds */
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
gint width;
|
|
Packit Service |
2781ba |
gint height;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_State *L;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
Priv;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#define TILE_CACHE_SIZE 16
|
|
Packit Service |
2781ba |
#define SCALE_WIDTH 125
|
|
Packit Service |
2781ba |
#define ENTRY_WIDTH 50
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int l_set_rgba (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_get_rgba (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_set_rgb (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_get_rgb (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_set_hsl (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_get_hsl (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_set_hsv (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_get_hsv (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_set_value (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_get_value (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_set_alpha (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_get_alpha (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_set_lab (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_get_lab (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_in_width (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_in_height (lua_State * lua);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int l_progress (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_flush (lua_State * lua);
|
|
Packit Service |
2781ba |
static int l_print (lua_State * lua);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static const luaL_reg gluas_functions[] =
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
{"set_rgba", l_set_rgba},
|
|
Packit Service |
2781ba |
{"get_rgba", l_get_rgba},
|
|
Packit Service |
2781ba |
{"set_rgb", l_set_rgb},
|
|
Packit Service |
2781ba |
{"get_rgb", l_get_rgb},
|
|
Packit Service |
2781ba |
{"set_hsl", l_set_hsl},
|
|
Packit Service |
2781ba |
{"get_hsl", l_get_hsl},
|
|
Packit Service |
2781ba |
{"set_hsv", l_set_hsv},
|
|
Packit Service |
2781ba |
{"get_hsv", l_get_hsv},
|
|
Packit Service |
2781ba |
{"set_lab", l_set_lab},
|
|
Packit Service |
2781ba |
{"get_lab", l_get_lab},
|
|
Packit Service |
2781ba |
{"set_value", l_set_value},
|
|
Packit Service |
2781ba |
{"get_value", l_get_value},
|
|
Packit Service |
2781ba |
{"set_alpha", l_set_alpha},
|
|
Packit Service |
2781ba |
{"get_alpha", l_get_alpha},
|
|
Packit Service |
2781ba |
{"in_width", l_in_width},
|
|
Packit Service |
2781ba |
{"in_height", l_in_height},
|
|
Packit Service |
2781ba |
{"progress", l_progress},
|
|
Packit Service |
2781ba |
{"flush", l_flush},
|
|
Packit Service |
2781ba |
{"print", l_print},
|
|
Packit Service |
2781ba |
{NULL, NULL}
|
|
Packit Service |
2781ba |
};
|
|
Packit Service |
2781ba |
static void
|
|
Packit Service |
2781ba |
register_functions (lua_State *L,
|
|
Packit Service |
2781ba |
const luaL_reg *l)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
for (;l->name; l++)
|
|
Packit Service |
2781ba |
lua_register (L, l->name, l->func);
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void
|
|
Packit Service |
2781ba |
drawable_lua_process (GeglOperation *op,
|
|
Packit Service |
2781ba |
GeglBuffer *drawable,
|
|
Packit Service |
2781ba |
GeglBuffer *aux,
|
|
Packit Service |
2781ba |
GeglBuffer *result,
|
|
Packit Service |
2781ba |
const GeglRectangle *roi,
|
|
Packit Service |
2781ba |
const gchar *file,
|
|
Packit Service |
2781ba |
const gchar *buffer,
|
|
Packit Service |
2781ba |
gdouble user_value)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
/*GimpRGB background;*/
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
GeglRectangle *in_rect = gegl_operation_source_get_bounding_box (GEGL_OPERATION (op),
|
|
Packit Service |
2781ba |
"input");
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_State *L;
|
|
Packit Service |
2781ba |
Priv p;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
L = lua_open ();
|
|
Packit Service |
2781ba |
luaL_openlibs (L);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
register_functions (L, gluas_functions);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
p.rgba_float = babl_format ("RGBA float");
|
|
Packit Service |
2781ba |
p.L = L;
|
|
Packit Service |
2781ba |
p.width = in_rect->width;
|
|
Packit Service |
2781ba |
p.height = in_rect->height;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
p.bx1 = roi->x;
|
|
Packit Service |
2781ba |
p.by1 = roi->y;
|
|
Packit Service |
2781ba |
p.bx2 = roi->x + roi->width;
|
|
Packit Service |
2781ba |
p.by2 = roi->y + roi->height;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushnumber (L, (double) user_value);
|
|
Packit Service |
2781ba |
lua_setglobal (L, "user_value");
|
|
Packit Service |
2781ba |
lua_pushnumber (L, (double) p.width);
|
|
Packit Service |
2781ba |
lua_setglobal (L, "width");
|
|
Packit Service |
2781ba |
lua_pushnumber (L, (double) p.height);
|
|
Packit Service |
2781ba |
lua_setglobal (L, "height");
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring (L, "priv");
|
|
Packit Service |
2781ba |
lua_pushlightuserdata (L, &p);
|
|
Packit Service |
2781ba |
lua_settable (L, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
p.in_drawable = drawable;
|
|
Packit Service |
2781ba |
p.aux_drawable = aux;
|
|
Packit Service |
2781ba |
p.out_drawable = result;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushnumber (L, (double) p.bx1);
|
|
Packit Service |
2781ba |
lua_setglobal (L, "bound_x0");
|
|
Packit Service |
2781ba |
lua_pushnumber (L, (double) p.bx2);
|
|
Packit Service |
2781ba |
lua_setglobal (L, "bound_x1");
|
|
Packit Service |
2781ba |
lua_pushnumber (L, (double) p.by1);
|
|
Packit Service |
2781ba |
lua_setglobal (L, "bound_y0");
|
|
Packit Service |
2781ba |
lua_pushnumber (L, (double) p.by2);
|
|
Packit Service |
2781ba |
lua_setglobal (L, "bound_y1");
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gint status = 0;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
luaL_loadstring (L, "os.setlocale ('C', 'numeric')");
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
if (file && file[0]!='\0')
|
|
Packit Service |
2781ba |
status = luaL_loadfile (L, file);
|
|
Packit Service |
2781ba |
else if (buffer)
|
|
Packit Service |
2781ba |
status = luaL_loadbuffer (L, buffer, strlen (buffer), "buffer");
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
if (status == 0)
|
|
Packit Service |
2781ba |
status = lua_pcall (L, 0, LUA_MULTRET, 0);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
if (status != 0)
|
|
Packit Service |
2781ba |
g_warning ("lua error: %s", lua_tostring (L, -1));
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#if 0
|
|
Packit Service |
2781ba |
void
|
|
Packit Service |
2781ba |
drawable_lua_do_file (GeglBuffer *drawable,
|
|
Packit Service |
2781ba |
GeglBuffer *result,
|
|
Packit Service |
2781ba |
GeglRectangle *roi,
|
|
Packit Service |
2781ba |
const gchar *file,
|
|
Packit Service |
2781ba |
gdouble user_value)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
drawable_lua_process (drawable, result, roi, file, NULL, user_value);
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
void
|
|
Packit Service |
2781ba |
drawable_lua_do_buffer (GeglBuffer *drawable,
|
|
Packit Service |
2781ba |
GeglBuffer *result,
|
|
Packit Service |
2781ba |
GeglRectangle *roi,
|
|
Packit Service |
2781ba |
const gchar *buffer,
|
|
Packit Service |
2781ba |
gdouble user_value)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
drawable_lua_process (drawable, result, roi, NULL, buffer, user_value);
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
#endif
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void inline
|
|
Packit Service |
2781ba |
get_rgba_pixel (void *data,
|
|
Packit Service |
2781ba |
int img_no,
|
|
Packit Service |
2781ba |
int x,
|
|
Packit Service |
2781ba |
int y,
|
|
Packit Service |
2781ba |
lua_Number pixel[4])
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
gfloat buf[4];
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
p = data;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
if (img_no == 0)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gint i;
|
|
Packit Service |
2781ba |
if (!p->in_drawable)
|
|
Packit Service |
2781ba |
return;
|
|
Packit Service |
2781ba |
gegl_buffer_sample (p->in_drawable, x, y, NULL, buf,
|
|
Packit Service |
2781ba |
p->rgba_float,
|
|
Packit Service |
2781ba |
GEGL_SAMPLER_NEAREST, GEGL_ABYSS_NONE);
|
|
Packit Service |
2781ba |
for (i = 0; i < 4; i++)
|
|
Packit Service |
2781ba |
pixel[i] = buf[i];
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
else if (img_no == 1)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gint i;
|
|
Packit Service |
2781ba |
if (!p->aux_drawable)
|
|
Packit Service |
2781ba |
return;
|
|
Packit Service |
2781ba |
gegl_buffer_sample (p->aux_drawable, x, y, NULL, buf,
|
|
Packit Service |
2781ba |
p->rgba_float,
|
|
Packit Service |
2781ba |
GEGL_SAMPLER_NEAREST, GEGL_ABYSS_NONE);
|
|
Packit Service |
2781ba |
for (i = 0; i < 4; i++)
|
|
Packit Service |
2781ba |
pixel[i] = buf[i];
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void inline
|
|
Packit Service |
2781ba |
set_rgba_pixel (void *data,
|
|
Packit Service |
2781ba |
int x,
|
|
Packit Service |
2781ba |
int y,
|
|
Packit Service |
2781ba |
lua_Number pixel[4])
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
GeglRectangle roi = {x,y,1,1};
|
|
Packit Service |
2781ba |
gint i;
|
|
Packit Service |
2781ba |
gfloat buf[4];
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
p = data;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
/*FIXME: */
|
|
Packit Service |
2781ba |
if (x < p->bx1 || y < p->by1 || x > p->bx2 || y > p->by2)
|
|
Packit Service |
2781ba |
return; /* outside selection, ignore */
|
|
Packit Service |
2781ba |
#if 0
|
|
Packit Service |
2781ba |
if (x < 0 || y < 0 || x >= p->width || y >= p->height)
|
|
Packit Service |
2781ba |
return; /* out of drawable bounds */
|
|
Packit Service |
2781ba |
#endif
|
|
Packit Service |
2781ba |
for (i = 0; i < 4; i++)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
buf[i]=pixel[i];
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
gegl_buffer_set (p->out_drawable, &roi,
|
|
Packit Service |
2781ba |
0, p->rgba_float, buf,
|
|
Packit Service |
2781ba |
GEGL_AUTO_ROWSTRIDE);
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int
|
|
Packit Service |
2781ba |
l_in_width (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring(lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable(lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata(lua, -1);
|
|
Packit Service |
2781ba |
lua_pop(lua, 1);
|
|
Packit Service |
2781ba |
lua_pushnumber(lua, (double)p->width);
|
|
Packit Service |
2781ba |
return 1;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int
|
|
Packit Service |
2781ba |
l_in_height(lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring(lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable(lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata(lua, -1);
|
|
Packit Service |
2781ba |
lua_pop(lua, 1);
|
|
Packit Service |
2781ba |
lua_pushnumber(lua, (double)p->height);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
return 1;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int
|
|
Packit Service |
2781ba |
l_flush (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring(lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable(lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata(lua, -1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int
|
|
Packit Service |
2781ba |
l_progress(lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
lua_Number percent;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
if (!lua_gettop(lua))
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
percent = lua_tonumber(lua, -1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#if 0
|
|
Packit Service |
2781ba |
g_warning ("progress,.. %f", percent);
|
|
Packit Service |
2781ba |
gimp_progress_update((double) percent);
|
|
Packit Service |
2781ba |
#endif
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int
|
|
Packit Service |
2781ba |
l_print (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
if (!lua_gettop(lua))
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
g_print ("%s\n", lua_tostring(lua, -1));
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int l_set_rgba (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
lua_Number pixel[4];
|
|
Packit Service |
2781ba |
lua_Number x, y;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable (lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata (lua, -1);
|
|
Packit Service |
2781ba |
lua_pop (lua, 1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
if (lua_gettop (lua) != 6)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
lua_pushstring(lua,
|
|
Packit Service |
2781ba |
"incorrect number of arguments to set_rgba (x, y, r, g, b, a)\n");
|
|
Packit Service |
2781ba |
lua_error (lua);
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
x = lua_tonumber (lua, -6);
|
|
Packit Service |
2781ba |
y = lua_tonumber (lua, -5);
|
|
Packit Service |
2781ba |
pixel[0] = lua_tonumber (lua, -4);
|
|
Packit Service |
2781ba |
pixel[1] = lua_tonumber (lua, -3);
|
|
Packit Service |
2781ba |
pixel[2] = lua_tonumber (lua, -2);
|
|
Packit Service |
2781ba |
pixel[3] = lua_tonumber (lua, -1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
set_rgba_pixel (p, x, y, pixel);
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int l_get_rgba (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
lua_Number x, y;
|
|
Packit Service |
2781ba |
lua_Number pixel[4];
|
|
Packit Service |
2781ba |
lua_Number img_no = 0;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable (lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata (lua, -1);
|
|
Packit Service |
2781ba |
lua_pop(lua, 1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
switch (lua_gettop (lua))
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
case 3:
|
|
Packit Service |
2781ba |
img_no = lua_tonumber(lua, -3);
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
case 2:
|
|
Packit Service |
2781ba |
img_no = 0;
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
default:
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "incorrect number of arguments to get_rgba (x, y)\n");
|
|
Packit Service |
2781ba |
lua_error (lua);
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
x = lua_tonumber(lua, -2);
|
|
Packit Service |
2781ba |
y = lua_tonumber(lua, -1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
get_rgba_pixel (p, img_no, x, y, pixel);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, pixel[0]);
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, pixel[1]);
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, pixel[2]);
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, pixel[3]);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
return 4;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int l_set_rgb (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
lua_Number pixel[4];
|
|
Packit Service |
2781ba |
lua_Number x, y;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable (lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata (lua, -1);
|
|
Packit Service |
2781ba |
lua_pop (lua, 1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
if (lua_gettop (lua) != 5)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
lua_pushstring(lua,
|
|
Packit Service |
2781ba |
"incorrect number of arguments to set_rgb (x, y, r, g, b)\n");
|
|
Packit Service |
2781ba |
lua_error (lua);
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
x = lua_tonumber (lua, -5);
|
|
Packit Service |
2781ba |
y = lua_tonumber (lua, -4);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
pixel[0] = lua_tonumber (lua, -3);
|
|
Packit Service |
2781ba |
pixel[1] = lua_tonumber (lua, -2);
|
|
Packit Service |
2781ba |
pixel[2] = lua_tonumber (lua, -1);
|
|
Packit Service |
2781ba |
pixel[3] = 1.0;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
set_rgba_pixel (p, x, y, pixel);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int l_get_rgb (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
lua_Number x, y;
|
|
Packit Service |
2781ba |
lua_Number pixel[4];
|
|
Packit Service |
2781ba |
lua_Number img_no = 0;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable (lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata (lua, -1);
|
|
Packit Service |
2781ba |
lua_pop(lua, 1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
switch (lua_gettop (lua))
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
case 3:
|
|
Packit Service |
2781ba |
img_no = lua_tonumber(lua, -3);
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
case 2:
|
|
Packit Service |
2781ba |
img_no = 0;
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
default:
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "incorrect number of arguments to get_rgb (x, y, [, image_no])\n");
|
|
Packit Service |
2781ba |
lua_error (lua);
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
x = lua_tonumber(lua, -2);
|
|
Packit Service |
2781ba |
y = lua_tonumber(lua, -1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
get_rgba_pixel (p, img_no, x, y, pixel);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, pixel[0]);
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, pixel[1]);
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, pixel[2]);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
return 3;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int l_set_value (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
lua_Number x, y, v;
|
|
Packit Service |
2781ba |
lua_Number pixel[4];
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable (lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata (lua, -1);
|
|
Packit Service |
2781ba |
lua_pop (lua, 1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
if (lua_gettop (lua) != 3)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
lua_pushstring(lua,
|
|
Packit Service |
2781ba |
"incorrect number of arguments to set_value (x, y, value)\n");
|
|
Packit Service |
2781ba |
lua_error (lua);
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
x = lua_tonumber (lua, -3);
|
|
Packit Service |
2781ba |
y = lua_tonumber (lua, -2);
|
|
Packit Service |
2781ba |
v = lua_tonumber (lua, -1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
pixel[0] = pixel[1] = pixel[2] = v;
|
|
Packit Service |
2781ba |
pixel[3] = 1.0;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
set_rgba_pixel (p, x, y, pixel);
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
int l_get_value (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
lua_Number pixel[4];
|
|
Packit Service |
2781ba |
lua_Number x,y;
|
|
Packit Service |
2781ba |
lua_Number img_no = 0;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable (lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata (lua, -1);
|
|
Packit Service |
2781ba |
lua_pop(lua, 1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
switch (lua_gettop (lua))
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
case 3:
|
|
Packit Service |
2781ba |
img_no = lua_tonumber(lua, -3);
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
case 2:
|
|
Packit Service |
2781ba |
img_no = 0;
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
default:
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "incorrect number of arguments to get_value (x, y [, image_no])\n");
|
|
Packit Service |
2781ba |
lua_error (lua);
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
x = lua_tonumber(lua, -2);
|
|
Packit Service |
2781ba |
y = lua_tonumber(lua, -1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
get_rgba_pixel (p, img_no, x, y, pixel);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, (pixel[0]+pixel[1]+pixel[2]) * (1.0/3));
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
return 1;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int l_set_alpha (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
lua_Number pixel[4];
|
|
Packit Service |
2781ba |
lua_Number x, y, a;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable (lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata (lua, -1);
|
|
Packit Service |
2781ba |
lua_pop (lua, 1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
if (lua_gettop (lua) != 3)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
lua_pushstring(lua,
|
|
Packit Service |
2781ba |
"incorrect number of arguments to set_alpha (x, y, a)\n");
|
|
Packit Service |
2781ba |
lua_error (lua);
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
x = lua_tonumber (lua, -3);
|
|
Packit Service |
2781ba |
y = lua_tonumber (lua, -2);
|
|
Packit Service |
2781ba |
a = lua_tonumber (lua, -1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
get_rgba_pixel (p, 0, x, y, pixel);
|
|
Packit Service |
2781ba |
pixel[3] = a;
|
|
Packit Service |
2781ba |
set_rgba_pixel (p, x, y, pixel);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int l_get_alpha (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
lua_Number x, y;
|
|
Packit Service |
2781ba |
lua_Number pixel[4];
|
|
Packit Service |
2781ba |
lua_Number img_no = 0;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable (lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata (lua, -1);
|
|
Packit Service |
2781ba |
lua_pop(lua, 1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
switch (lua_gettop (lua))
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
case 3:
|
|
Packit Service |
2781ba |
img_no = lua_tonumber(lua, -3);
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
case 2:
|
|
Packit Service |
2781ba |
img_no = 0;
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
default:
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "incorrect number of arguments to get_alpha (x, y [,image])\n");
|
|
Packit Service |
2781ba |
lua_error (lua);
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
x = lua_tonumber(lua, -2);
|
|
Packit Service |
2781ba |
y = lua_tonumber(lua, -1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
get_rgba_pixel (p, img_no, x, y, pixel);
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, pixel[3]);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
return 1;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int l_set_lab (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
lua_Number pixel[4];
|
|
Packit Service |
2781ba |
lua_Number x, y, l, a, b;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable (lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata (lua, -1);
|
|
Packit Service |
2781ba |
lua_pop (lua, 1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
if (lua_gettop (lua) != 5)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
lua_pushstring(lua,
|
|
Packit Service |
2781ba |
"incorrect number of arguments to set_lab (x, y, l, a, b)\n");
|
|
Packit Service |
2781ba |
lua_error (lua);
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
x = lua_tonumber (lua, -5);
|
|
Packit Service |
2781ba |
y = lua_tonumber (lua, -4);
|
|
Packit Service |
2781ba |
l = lua_tonumber (lua, -3);
|
|
Packit Service |
2781ba |
a = lua_tonumber (lua, -2);
|
|
Packit Service |
2781ba |
b = lua_tonumber (lua, -1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
/* pixel assumed to be of type double */
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
get_rgba_pixel (p, 0, x, y, pixel);
|
|
Packit Service |
2781ba |
#if 0
|
|
Packit Service |
2781ba |
cpercep_space_to_rgb (l, a, b, &(pixel[0]), &(pixel[1]), &(pixel[2]));
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
int i;
|
|
Packit Service |
2781ba |
for (i=0;i<3;i++)
|
|
Packit Service |
2781ba |
pixel[i] *= (1.0/255.0);
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
#endif
|
|
Packit Service |
2781ba |
set_rgba_pixel (p, x, y, pixel);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int l_get_lab (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
lua_Number x, y;
|
|
Packit Service |
2781ba |
lua_Number img_no = 0;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_Number pixel[4];
|
|
Packit Service |
2781ba |
/*double lab_pixel[3];*/
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable (lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata (lua, -1);
|
|
Packit Service |
2781ba |
lua_pop(lua, 1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
switch (lua_gettop (lua))
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
case 3:
|
|
Packit Service |
2781ba |
img_no = lua_tonumber(lua, -3);
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
case 2:
|
|
Packit Service |
2781ba |
img_no = 0;
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
default:
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "incorrect number of arguments to get_rgb (x, y, [, image_no])\n");
|
|
Packit Service |
2781ba |
lua_error (lua);
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
x = lua_tonumber(lua, -2);
|
|
Packit Service |
2781ba |
y = lua_tonumber(lua, -1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
get_rgba_pixel (p, img_no, x, y, pixel);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#if 0
|
|
Packit Service |
2781ba |
cpercep_rgb_to_space (pixel[0] * 255.0,
|
|
Packit Service |
2781ba |
pixel[1] * 255.0,
|
|
Packit Service |
2781ba |
pixel[2] * 255.0,
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
&(lab_pixel[0]),
|
|
Packit Service |
2781ba |
&(lab_pixel[1]),
|
|
Packit Service |
2781ba |
&(lab_pixel[2]));
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, lab_pixel[0]);
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, lab_pixel[1]);
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, lab_pixel[2]);
|
|
Packit Service |
2781ba |
#endif
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
return 3;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int l_set_hsl (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
lua_Number pixel[4];
|
|
Packit Service |
2781ba |
lua_Number x, y, h, s, l;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable (lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata (lua, -1);
|
|
Packit Service |
2781ba |
lua_pop (lua, 1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
if (lua_gettop (lua) != 5)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
lua_pushstring(lua,
|
|
Packit Service |
2781ba |
"incorrect number of arguments to set_lab (x, y, l, a, b)\n");
|
|
Packit Service |
2781ba |
lua_error (lua);
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
x = lua_tonumber (lua, -5);
|
|
Packit Service |
2781ba |
y = lua_tonumber (lua, -4);
|
|
Packit Service |
2781ba |
h = lua_tonumber (lua, -3);
|
|
Packit Service |
2781ba |
s = lua_tonumber (lua, -2);
|
|
Packit Service |
2781ba |
l = lua_tonumber (lua, -1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
get_rgba_pixel (p, 0, x, y, pixel);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#if 0
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
GimpRGB rgb;
|
|
Packit Service |
2781ba |
GimpHSL hsl;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
hsl.h = h;
|
|
Packit Service |
2781ba |
hsl.s = s;
|
|
Packit Service |
2781ba |
hsl.l = l;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
gimp_hsl_to_rgb (&hsl, &rgb);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
pixel[0]=rgb.r;
|
|
Packit Service |
2781ba |
pixel[1]=rgb.g;
|
|
Packit Service |
2781ba |
pixel[2]=rgb.b;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
#endif
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
set_rgba_pixel (p, x, y, pixel);
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int l_get_hsl (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
lua_Number x, y;
|
|
Packit Service |
2781ba |
lua_Number img_no = 0;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_Number pixel[4];
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable (lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata (lua, -1);
|
|
Packit Service |
2781ba |
lua_pop(lua, 1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
switch (lua_gettop (lua))
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
case 3:
|
|
Packit Service |
2781ba |
img_no = lua_tonumber(lua, -3);
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
case 2:
|
|
Packit Service |
2781ba |
img_no = 0;
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
default:
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "incorrect number of arguments to get_rgb ([image_no,] x, y)\n");
|
|
Packit Service |
2781ba |
lua_error (lua);
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
x = lua_tonumber(lua, -2);
|
|
Packit Service |
2781ba |
y = lua_tonumber(lua, -1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
get_rgba_pixel (p, img_no, x, y, pixel);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#if 0
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
GimpRGB rgb;
|
|
Packit Service |
2781ba |
GimpHSL hsl;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
rgb.r = pixel[0];
|
|
Packit Service |
2781ba |
rgb.g = pixel[1];
|
|
Packit Service |
2781ba |
rgb.b = pixel[2];
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
gimp_rgb_to_hsl (&rgb, &hsl);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, hsl.h );
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, hsl.s );
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, hsl.l );
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
#endif
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
return 3;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int l_set_hsv (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
lua_Number pixel[4];
|
|
Packit Service |
2781ba |
lua_Number x, y, h, s, v;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable (lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata (lua, -1);
|
|
Packit Service |
2781ba |
lua_pop (lua, 1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
if (lua_gettop (lua) != 5)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
lua_pushstring(lua,
|
|
Packit Service |
2781ba |
"incorrect number of arguments to set_lab (x, y, l, a, b)\n");
|
|
Packit Service |
2781ba |
lua_error (lua);
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
x = lua_tonumber (lua, -5);
|
|
Packit Service |
2781ba |
y = lua_tonumber (lua, -4);
|
|
Packit Service |
2781ba |
h = lua_tonumber (lua, -3);
|
|
Packit Service |
2781ba |
s = lua_tonumber (lua, -2);
|
|
Packit Service |
2781ba |
v = lua_tonumber (lua, -1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
get_rgba_pixel (p, 0, x, y, pixel);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#if 0
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
GimpRGB rgb;
|
|
Packit Service |
2781ba |
GimpHSV hsv;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
hsv.h = h;
|
|
Packit Service |
2781ba |
hsv.s = s;
|
|
Packit Service |
2781ba |
hsv.v = v;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
gimp_hsv_to_rgb (&hsv, &rgb);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
pixel[0]=rgb.r;
|
|
Packit Service |
2781ba |
pixel[1]=rgb.g;
|
|
Packit Service |
2781ba |
pixel[2]=rgb.b;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
#endif
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
set_rgba_pixel (p, x, y, pixel);
|
|
Packit Service |
2781ba |
return 0;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static int l_get_hsv (lua_State * lua)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
Priv *p;
|
|
Packit Service |
2781ba |
lua_Number x, y;
|
|
Packit Service |
2781ba |
lua_Number img_no = 0;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_Number pixel[4];
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "priv");
|
|
Packit Service |
2781ba |
lua_gettable (lua, LUA_REGISTRYINDEX);
|
|
Packit Service |
2781ba |
p = lua_touserdata (lua, -1);
|
|
Packit Service |
2781ba |
lua_pop(lua, 1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
switch (lua_gettop (lua))
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
case 3:
|
|
Packit Service |
2781ba |
img_no = lua_tonumber(lua, -3);
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
case 2:
|
|
Packit Service |
2781ba |
img_no = 0;
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
default:
|
|
Packit Service |
2781ba |
lua_pushstring (lua, "incorrect number of arguments to get_rgb ([image_no,] x, y)\n");
|
|
Packit Service |
2781ba |
lua_error (lua);
|
|
Packit Service |
2781ba |
break;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
x = lua_tonumber(lua, -2);
|
|
Packit Service |
2781ba |
y = lua_tonumber(lua, -1);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
get_rgba_pixel (p, img_no, x, y, pixel);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#if 0
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
GimpRGB rgb;
|
|
Packit Service |
2781ba |
GimpHSV hsv;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
rgb.r = pixel[0];
|
|
Packit Service |
2781ba |
rgb.g = pixel[1];
|
|
Packit Service |
2781ba |
rgb.b = pixel[2];
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
gimp_rgb_to_hsv (&rgb, &hsv;;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, hsv.h );
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, hsv.s );
|
|
Packit Service |
2781ba |
lua_pushnumber (lua, hsv.v );
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
#endif
|
|
Packit Service |
2781ba |
return 3;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void
|
|
Packit Service |
2781ba |
prepare (GeglOperation *operation)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
gegl_operation_set_format (operation, "input", babl_format ("RGBA float"));
|
|
Packit Service |
2781ba |
gegl_operation_set_format (operation, "aux", babl_format ("RGBA float"));
|
|
Packit Service |
2781ba |
gegl_operation_set_format (operation, "output", babl_format ("RGBA float"));
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static GeglRectangle
|
|
Packit Service |
2781ba |
get_bounding_box (GeglOperation *operation)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
GeglRectangle result = {0,0,0,0};
|
|
Packit Service |
2781ba |
GeglRectangle *in_rect = gegl_operation_source_get_bounding_box (operation,
|
|
Packit Service |
2781ba |
"input");
|
|
Packit Service |
2781ba |
if (!in_rect)
|
|
Packit Service |
2781ba |
return result;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
result = *in_rect;
|
|
Packit Service |
2781ba |
return result;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static gboolean
|
|
Packit Service |
2781ba |
process (GeglOperation *operation,
|
|
Packit Service |
2781ba |
GeglBuffer *input,
|
|
Packit Service |
2781ba |
GeglBuffer *aux,
|
|
Packit Service |
2781ba |
GeglBuffer *output,
|
|
Packit Service |
2781ba |
const GeglRectangle *result,
|
|
Packit Service |
2781ba |
gint level)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
GeglChantO *o = GEGL_CHANT_PROPERTIES (operation);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
if (o->file && g_file_test (o->file, G_FILE_TEST_IS_REGULAR))
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
drawable_lua_process (operation, input, aux, output, result, o->file, NULL, o->user_value);
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
else
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
drawable_lua_process (operation, input, aux, output, result, NULL, o->script, o->user_value);
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
return TRUE;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static GeglRectangle
|
|
Packit Service |
2781ba |
get_required_for_output (GeglOperation *operation,
|
|
Packit Service |
2781ba |
const gchar *input_pad,
|
|
Packit Service |
2781ba |
const GeglRectangle *roi)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
GeglRectangle result = *gegl_operation_source_get_bounding_box (operation, "input");
|
|
Packit Service |
2781ba |
return result;
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
static void
|
|
Packit Service |
2781ba |
gegl_chant_class_init (GeglChantClass *klass)
|
|
Packit Service |
2781ba |
{
|
|
Packit Service |
2781ba |
GeglOperationClass *operation_class;
|
|
Packit Service |
2781ba |
GeglOperationComposerClass *composer_class;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
operation_class = GEGL_OPERATION_CLASS (klass);
|
|
Packit Service |
2781ba |
composer_class = GEGL_OPERATION_COMPOSER_CLASS (klass);
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
composer_class->process = process;
|
|
Packit Service |
2781ba |
operation_class->prepare = prepare;
|
|
Packit Service |
2781ba |
operation_class->get_bounding_box = get_bounding_box;
|
|
Packit Service |
2781ba |
operation_class->get_required_for_output = get_required_for_output;
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
gegl_operation_class_set_keys (operation_class,
|
|
Packit Service |
2781ba |
"name" , "gegl:gluas",
|
|
Packit Service |
2781ba |
"categories" , "script:misc",
|
|
Packit Service |
2781ba |
"description" ,
|
|
Packit Service |
2781ba |
_("A general purpose filter/composer implementation proxy for the"
|
|
Packit Service |
2781ba |
" lua programming language."),
|
|
Packit Service |
2781ba |
NULL);
|
|
Packit Service |
2781ba |
}
|
|
Packit Service |
2781ba |
|
|
Packit Service |
2781ba |
#endif
|