本文整理汇总了C++中gegl_buffer_get_width函数的典型用法代码示例。如果您正苦于以下问题:C++ gegl_buffer_get_width函数的具体用法?C++ gegl_buffer_get_width怎么用?C++ gegl_buffer_get_width使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了gegl_buffer_get_width函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: median
static void
median (GeglBuffer *src,
GeglBuffer *dst,
gint radius,
gdouble rank)
{
RankList list = {0};
gint x,y;
gint offset;
gfloat *src_buf;
gfloat *dst_buf;
src_buf = g_new0 (gfloat, gegl_buffer_get_pixel_count (src) * 4);
dst_buf = g_new0 (gfloat, gegl_buffer_get_pixel_count (dst) * 4);
gegl_buffer_get (src, NULL, 1.0, babl_format ("RGBA float"), src_buf,
GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
offset = 0;
for (y=0; y<gegl_buffer_get_height (dst); y++)
for (x=0; x<gegl_buffer_get_width (dst); x++)
{
gint u,v;
gfloat *median_pix;
list_clear (&list);
for (v=y-radius;v<=y+radius;v++)
for (u=x-radius;u<=x+radius;u++)
{
gint ru, rv;
ru = (x-u)*(x-u);
rv = (y-v)*(y-v);
if (u >= 0 && u < gegl_buffer_get_width (dst) &&
v >= 0 && v < gegl_buffer_get_height (dst) &&
(ru+rv) < radius* radius
)
{
gfloat *src_pix = src_buf + (u+(v * gegl_buffer_get_width (src))) * 4;
gfloat luma = (src_pix[0] * 0.212671 +
src_pix[1] * 0.715160 +
src_pix[2] * 0.072169);
list_add (&list, luma, src_pix);
}
}
median_pix = list_percentile (&list, rank);
for (u=0; u<4;u++)
dst_buf[offset*4+u] = median_pix[u];
offset++;
}
gegl_buffer_set (dst, NULL, 0, babl_format ("RGBA float"), dst_buf, GEGL_AUTO_ROWSTRIDE);
g_free (src_buf);
g_free (dst_buf);
}
示例2: process
static gboolean
process (GeglOperation *operation,
GeglBuffer *input,
GeglBuffer *aux,
GeglBuffer *output,
const GeglRectangle *result,
gint level)
{
GeglBuffer *temp_in;
GeglBuffer *temp_aux;
/* FIXME: just pass the originals buffers if the result rectangle does not
* include both input buffers
*/
temp_in = gegl_buffer_create_sub_buffer (input, result);
temp_aux = gegl_buffer_create_sub_buffer (aux, result);
{
gfloat *buf = g_new0 (gfloat, result->width * result->height * 4);
gfloat *bufB = g_new0 (gfloat, result->width * result->height * 4);
gegl_buffer_get (temp_in, NULL, 1.0, babl_format ("RGBA float"), buf,
GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
gegl_buffer_get (temp_aux, NULL, 1.0, babl_format ("RGBA float"), bufB,
GEGL_AUTO_ROWSTRIDE, GEGL_ABYSS_NONE);
{
gint offset=0;
gint x,y;
for (y=0;y<gegl_buffer_get_height (output);y++)
for (x=0;x<gegl_buffer_get_width (output);x++)
{
if (x + result->x >= gegl_buffer_get_width (input))
{
buf[offset+0]=bufB[offset+0];
buf[offset+1]=bufB[offset+1];
buf[offset+2]=bufB[offset+2];
buf[offset+3]=bufB[offset+3];
}
offset+=4;
}
}
gegl_buffer_set (output, NULL, 0, babl_format ("RGBA float"), buf,
GEGL_AUTO_ROWSTRIDE);
g_free (buf);
g_free (bufB);
}
g_object_unref (temp_in);
g_object_unref (temp_aux);
return TRUE;
}
示例3: gimp_buffer_get_width
gint
gimp_buffer_get_width (const GimpBuffer *buffer)
{
g_return_val_if_fail (GIMP_IS_BUFFER (buffer), 0);
return gegl_buffer_get_width (buffer->buffer);
}
示例4: gimp_buffer_to_tiles
TileManager *
gimp_buffer_to_tiles (GeglBuffer *buffer)
{
const Babl *format = gegl_buffer_get_format (buffer);
TileManager *new_tiles = NULL;
GeglNode *source = NULL;
GeglNode *sink = NULL;
g_return_val_if_fail (buffer != NULL, NULL);
/* Setup and process the graph */
new_tiles = tile_manager_new (gegl_buffer_get_width (buffer),
gegl_buffer_get_height (buffer),
gimp_babl_format_to_legacy_bpp (format));
source = gegl_node_new_child (NULL,
"operation", "gegl:buffer-source",
"buffer", buffer,
NULL);
sink = gegl_node_new_child (NULL,
"operation", "gimp:tilemanager-sink",
"tile-manager", new_tiles,
NULL);
gegl_node_link_many (source, sink, NULL);
gegl_node_process (sink);
/* Clenaup */
g_object_unref (sink);
g_object_unref (source);
return new_tiles;
}
示例5: gimp_create_image_from_buffer
void
gimp_create_image_from_buffer (Gimp *gimp,
GeglBuffer *buffer)
{
GimpImage *image;
GimpLayer *layer;
const Babl *format;
g_return_if_fail (GIMP_IS_GIMP (gimp));
g_return_if_fail (GEGL_IS_BUFFER (buffer));
format = gegl_buffer_get_format (buffer);
image = gimp_create_image (gimp,
gegl_buffer_get_width (buffer),
gegl_buffer_get_height (buffer),
gimp_babl_format_get_base_type (format),
gimp_babl_format_get_precision (format),
FALSE);
layer = gimp_layer_new_from_buffer (buffer, image, format,
"Debug Image",
GIMP_OPACITY_OPAQUE,
GIMP_NORMAL_MODE);
gimp_image_add_layer (image, layer, NULL, -1, FALSE);
gimp_create_display (gimp, image, GIMP_UNIT_PIXEL, 1.0);
}
示例6: gimp_channel_combine_buffer
void
gimp_channel_combine_buffer (GimpChannel *mask,
GeglBuffer *add_on_buffer,
GimpChannelOps op,
gint off_x,
gint off_y)
{
GeglBuffer *buffer;
gint x, y, w, h;
g_return_if_fail (GIMP_IS_CHANNEL (mask));
g_return_if_fail (GEGL_IS_BUFFER (add_on_buffer));
buffer = gimp_drawable_get_buffer (GIMP_DRAWABLE (mask));
if (! gimp_gegl_mask_combine_buffer (buffer, add_on_buffer,
op, off_x, off_y))
return;
gimp_rectangle_intersect (off_x, off_y,
gegl_buffer_get_width (add_on_buffer),
gegl_buffer_get_height (add_on_buffer),
0, 0,
gimp_item_get_width (GIMP_ITEM (mask)),
gimp_item_get_height (GIMP_ITEM (mask)),
&x, &y, &w, &h);
mask->bounds_known = FALSE;
gimp_drawable_update (GIMP_DRAWABLE (mask), x, y, w, h);
}
示例7: gimp_layer_new_from_gegl_buffer
/**
* gimp_layer_new_from_gegl_buffer:
* @buffer: The buffer to make the new layer from.
* @dest_image: The image the new layer will be added to.
* @format: The #Babl format of the new layer.
* @name: The new layer's name.
* @opacity: The new layer's opacity.
* @mode: The new layer's mode.
*
* Copies %buffer to a layer taking into consideration the
* possibility of transforming the contents to meet the requirements
* of the target image type
*
* Return value: The new layer.
**/
GimpLayer *
gimp_layer_new_from_gegl_buffer (GeglBuffer *buffer,
GimpImage *dest_image,
const Babl *format,
const gchar *name,
gdouble opacity,
GimpLayerModeEffects mode,
GimpColorProfile *buffer_profile)
{
GimpLayer *layer;
g_return_val_if_fail (GEGL_IS_BUFFER (buffer), NULL);
g_return_val_if_fail (GIMP_IS_IMAGE (dest_image), NULL);
g_return_val_if_fail (format != NULL, NULL);
g_return_val_if_fail (buffer_profile == NULL ||
GIMP_IS_COLOR_PROFILE (buffer_profile), NULL);
/* do *not* use the buffer's format because this function gets
* buffers of any format passed, and converts them
*/
layer = gimp_layer_new (dest_image,
gegl_buffer_get_width (buffer),
gegl_buffer_get_height (buffer),
format,
name, opacity, mode);
gimp_layer_new_convert_buffer (layer, buffer, buffer_profile, NULL);
return layer;
}
示例8: gimp_brush_transform_boundary_exact
static GimpBezierDesc *
gimp_brush_transform_boundary_exact (GimpBrush *brush,
gdouble scale,
gdouble aspect_ratio,
gdouble angle,
gdouble hardness)
{
const GimpTempBuf *mask;
mask = gimp_brush_transform_mask (brush, NULL,
scale, aspect_ratio, angle, hardness);
if (mask)
{
GeglBuffer *buffer;
GimpBoundSeg *bound_segs;
gint n_bound_segs;
buffer = gimp_temp_buf_create_buffer ((GimpTempBuf *) mask);
bound_segs = gimp_boundary_find (buffer, NULL,
babl_format ("Y float"),
GIMP_BOUNDARY_WITHIN_BOUNDS,
0, 0,
gegl_buffer_get_width (buffer),
gegl_buffer_get_height (buffer),
0.0,
&n_bound_segs);
g_object_unref (buffer);
if (bound_segs)
{
GimpBoundSeg *stroke_segs;
gint n_stroke_groups;
stroke_segs = gimp_boundary_sort (bound_segs, n_bound_segs,
&n_stroke_groups);
g_free (bound_segs);
if (stroke_segs)
{
GimpBezierDesc *path;
path = gimp_bezier_desc_new_from_bound_segs (stroke_segs,
n_bound_segs,
n_stroke_groups);
g_free (stroke_segs);
return path;
}
}
}
return NULL;
}
示例9: debug_show_image_graph
static gboolean
debug_show_image_graph (GimpImage *source_image)
{
Gimp *gimp = source_image->gimp;
GimpProjectable *projectable = GIMP_PROJECTABLE (source_image);
GeglNode *image_graph = gimp_projectable_get_graph (projectable);
GeglNode *output_node = gegl_node_get_output_proxy (image_graph, "output");
GimpImage *new_image = NULL;
GimpLayer *layer = NULL;
GeglNode *introspect = NULL;
GeglNode *sink = NULL;
GeglBuffer *buffer = NULL;
gchar *new_name = NULL;
/* Setup and process the introspection graph */
introspect = gegl_node_new_child (NULL,
"operation", "gegl:introspect",
"node", output_node,
NULL);
sink = gegl_node_new_child (NULL,
"operation", "gegl:buffer-sink",
"buffer", &buffer,
NULL);
gegl_node_link_many (introspect, sink, NULL);
gegl_node_process (sink);
/* Create a new image of the result */
new_name = g_strdup_printf ("%s GEGL graph",
gimp_image_get_display_name (source_image));
new_image = gimp_create_image (gimp,
gegl_buffer_get_width (buffer),
gegl_buffer_get_height (buffer),
GIMP_RGB,
GIMP_PRECISION_U8,
FALSE);
gimp_image_set_uri (new_image, new_name);
layer = gimp_layer_new_from_buffer (buffer,
new_image,
gimp_image_get_layer_format (new_image,
TRUE),
new_name,
1.0,
GIMP_NORMAL_MODE);
gimp_image_add_layer (new_image, layer, NULL, 0, FALSE);
gimp_create_display (gimp, new_image, GIMP_UNIT_PIXEL, 1.0);
/* Cleanup */
g_object_unref (new_image);
g_free (new_name);
g_object_unref (buffer);
g_object_unref (sink);
g_object_unref (introspect);
g_object_unref (source_image);
return FALSE;
}
示例10: gimp_smudge_accumulator_coords
static void
gimp_smudge_accumulator_coords (GimpPaintCore *paint_core,
const GimpCoords *coords,
gint *x,
gint *y)
{
GimpSmudge *smudge = GIMP_SMUDGE (paint_core);
*x = (gint) coords->x - gegl_buffer_get_width (smudge->accum_buffer) / 2;
*y = (gint) coords->y - gegl_buffer_get_height (smudge->accum_buffer) / 2;
}
示例11: get_bounding_box
static GeglRectangle
get_bounding_box (GeglOperation *operation)
{
GeglProperties *o = GEGL_PROPERTIES (operation);
GeglRectangle result = {0,0,0,0};
load_buffer (o);
result.width = gegl_buffer_get_width (GEGL_BUFFER (o->user_data));
result.height = gegl_buffer_get_height (GEGL_BUFFER (o->user_data));
return result;
}
示例12: gimp_applicator_apply
void
gimp_applicator_apply (GimpApplicator *applicator,
GeglBuffer *src_buffer,
GeglBuffer *apply_buffer,
gint apply_buffer_x,
gint apply_buffer_y,
gdouble opacity,
GimpLayerModeEffects paint_mode)
{
gint width = gegl_buffer_get_width (apply_buffer);
gint height = gegl_buffer_get_height (apply_buffer);
if (applicator->src_buffer != src_buffer)
{
applicator->src_buffer = src_buffer;
gegl_node_set (applicator->src_node,
"buffer", src_buffer,
NULL);
}
if (applicator->apply_buffer != apply_buffer)
{
applicator->apply_buffer = apply_buffer;
gegl_node_set (applicator->apply_src_node,
"buffer", apply_buffer,
NULL);
}
gegl_node_set (applicator->apply_offset_node,
"x", (gdouble) apply_buffer_x,
"y", (gdouble) apply_buffer_y,
NULL);
if ((applicator->opacity != opacity) ||
(applicator->paint_mode != paint_mode))
{
applicator->opacity = opacity;
applicator->paint_mode = paint_mode;
gimp_gegl_mode_node_set (applicator->mode_node,
paint_mode, opacity, FALSE);
}
gegl_processor_set_rectangle (applicator->processor,
GEGL_RECTANGLE (apply_buffer_x,
apply_buffer_y,
width, height));
while (gegl_processor_work (applicator->processor, NULL));
}
示例13: gimp_gegl_buffer_get_memsize
gint64
gimp_gegl_buffer_get_memsize (GeglBuffer *buffer)
{
if (buffer)
{
const Babl *format = gegl_buffer_get_format (buffer);
return (babl_format_get_bytes_per_pixel (format) *
gegl_buffer_get_width (buffer) *
gegl_buffer_get_height (buffer) +
gimp_g_object_get_memsize (G_OBJECT (buffer)));
}
return 0;
}
示例14: get_bounding_box
static GeglRectangle
get_bounding_box (GeglOperation *operation)
{
GeglRectangle result = {0,0,0,0};
GeglChantO *o = GEGL_CHANT_PROPERTIES (operation);
load_buffer (o);
if (o->chant_data)
{
result.width = gegl_buffer_get_width (GEGL_BUFFER (o->chant_data));
result.height = gegl_buffer_get_height (GEGL_BUFFER (o->chant_data));
}
return result;
}
示例15: gimp_gegl_pyramid_get_memsize
gint64
gimp_gegl_pyramid_get_memsize (GeglBuffer *buffer)
{
if (buffer)
{
const Babl *format = gegl_buffer_get_format (buffer);
/* The pyramid levels constitute a geometric sum with a ratio of 1/4. */
return ((gint64) babl_format_get_bytes_per_pixel (format) *
(gint64) gegl_buffer_get_width (buffer) *
(gint64) gegl_buffer_get_height (buffer) * 1.33 +
gimp_g_object_get_memsize (G_OBJECT (buffer)));
}
return 0;
}