1
1
mirror of https://gitlab.gnome.org/GNOME/gimp.git synced 2025-10-06 01:12:40 +02:00

Compare commits

...

30 Commits

Author SHA1 Message Date
Jie Ding
aa94032698 8.16 2009-08-16 14:08:26 +08:00
Jie Ding
6d1b4ba79d 8.9_ 2009-08-09 22:45:44 +08:00
Jie Ding
c620f78d22 8.9 2009-08-09 17:53:33 +08:00
Jie Ding
eaee94d6d2 8.7 2009-08-07 10:05:19 +08:00
Jie Ding
4ebce14cfa 8.6 2009-08-06 02:26:22 +08:00
Jie Ding
0242b6803a 8.1 2009-08-02 09:39:31 +08:00
Jie Ding
bda100a22c 7.28 2009-07-28 22:11:47 +08:00
Jie Ding
63fe26ceec 7.25 2009-07-25 12:46:06 +08:00
Jie Ding
4ac143cad2 7.22 2009-07-22 16:44:18 +08:00
Jie Ding
44069e345b alter 'key' to 'button' 2009-07-16 01:53:02 +08:00
Jie Ding
443eb7d97a frame alter 2009-07-10 16:42:17 +08:00
Jie Ding
d7910ba49f 7.6 alter format 2009-07-06 15:08:50 +08:00
Jie Ding
5af8481c67 7.5 debug 2009-07-05 16:44:08 +08:00
Jie Ding
6039a5daad the input area of drb is not right 2009-07-04 03:58:40 +08:00
Jie Ding
44556716bf area of drb is not right 2009-07-03 00:41:47 +08:00
Jie Ding
fc796fd98c 7.2.3 2009-07-03 00:16:23 +08:00
Jie Ding
b81287e29c area 2009-07-02 02:47:55 +08:00
Jie Ding
236a8f0e69 7.1.2_drb 2009-07-01 19:29:20 +08:00
Jie Ding
3450bcbdb7 07.01.17 2009-07-01 17:47:20 +08:00
Jie Ding
c721b30229 7.1_11:20 2009-07-01 17:10:16 +08:00
Jie Ding
bd0a6950a3 threshold double/float? 2009-07-01 16:13:57 +08:00
Jie Ding
45fde8c81b threshold double 2009-07-01 16:11:02 +08:00
Jie Ding
0cba8f18e8 threshold alter 2009-07-01 15:55:09 +08:00
Jie Ding
7c1fe4c87b drbsignal should be push by a function 2009-07-01 13:15:05 +08:00
Jie Ding
11eb0826f2 6.30 shift-wrong-input 2009-06-30 18:30:31 +08:00
Jie Ding
1903a956b3 siox-drb 6.30.1 2009-06-30 02:02:51 +08:00
Jie Ding
63f1bb6d6f 6.29 error alter 2009-06-29 14:48:40 +08:00
Jie Ding
00b83a3e07 6.27.3 2009-06-27 00:58:41 +08:00
Jie Ding
206f0f3803 6.27.2 2009-06-27 00:51:26 +08:00
Jie Ding
6304d540fa 6.27.1 2009-06-27 00:46:06 +08:00
17 changed files with 671 additions and 30628 deletions

View File

@@ -132,5 +132,15 @@ typedef enum /*< pdb-skip, skip >*/
SIOX_REFINEMENT_CHANGE_MULTIBLOB = (1 << 4),
SIOX_REFINEMENT_RECALCULATE = 0xFF
} SioxRefinementType;
typedef enum /*< pdb-skip, skip >*///(new)
{
SIOX_DRB_NO_CHANGE = 0,
SIOX_DRB_ADD = (1 << 0),
SIOX_DRB_SUBTRACT = (1 << 1),
SIOX_DRB_CHANGE_THRESHOLD = (1 << 2),/* threshold */
SIOX_DRB_CHANGE_SENSITIVITY = (1 << 3),
SIOX_DRB_CHANGE_SMOOTHNESS = (1 << 4),
SIOX_DRB_RECALCULATE = 0xFF
} SioxDRBType;
#endif /* __BASE_ENUMS_H__ */

View File

@@ -50,6 +50,7 @@
#include "tile-manager.h"
#include "siox.h"
#include "tile-manager-private.h"
/* Thresholds in the mask:
* pixels < SIOX_LOW are known background
@@ -103,6 +104,7 @@ struct _SioxState
gint xsbpp;
};
/* A struct that holds the classification result */
typedef struct
{
@@ -782,7 +784,7 @@ siox_init (TileManager *pixels,
(GDestroyNotify) siox_cache_entry_free);
cpercep_init ();
printf("offset_x=%d, offset_y=%d,x=%d, y=%d, width=%d, height=%d,state->bgsiglen=%d,state->fgsiglen=%d\n", offset_x, offset_y, x, y, width, height, state->bgsiglen, state->fgsiglen);
#ifdef SIOX_DEBUG
g_printerr ("siox.c: siox_init (bpp=%d, "
"x=%d, y=%d, width=%d, height=%d, offset_x=%d, offset_y=%d)\n",
@@ -868,20 +870,18 @@ siox_foreground_extract (SioxState *state,
total = width * height;
if (refinement & SIOX_REFINEMENT_ADD_FOREGROUND)
g_hash_table_foreach_remove (state->cache, siox_cache_remove_bg, NULL);
g_hash_table_foreach_remove (state->cache, siox_cache_remove_bg, NULL);
if (refinement & SIOX_REFINEMENT_ADD_BACKGROUND)
g_hash_table_foreach_remove (state->cache, siox_cache_remove_fg, NULL);
g_hash_table_foreach_remove (state->cache, siox_cache_remove_fg, NULL);
if (refinement & SIOX_REFINEMENT_CHANGE_SENSITIVITY)
{
refinement = SIOX_REFINEMENT_RECALCULATE;
}
else
{
if (! state->bgsig)
refinement |= SIOX_REFINEMENT_ADD_BACKGROUND;
if (! state->fgsig)
refinement |= SIOX_REFINEMENT_ADD_FOREGROUND;
}
@@ -920,10 +920,11 @@ siox_foreground_extract (SioxState *state,
}
pixels += mapPR.w * mapPR.h;
if (n % 16 == 0)
siox_progress_update (progress_callback, progress_data,
siox_progress_update (progress_callback, progress_data,
0.1 * ((gdouble) pixels / (gdouble) total));
}
#ifdef SIOX_DEBUG
@@ -948,7 +949,7 @@ siox_foreground_extract (SioxState *state,
pr = pixel_regions_register (2, &srcPR, &mapPR);
if (! (refinement & SIOX_REFINEMENT_ADD_FOREGROUND))
{
{
gint i = 0;
for (pixels = 0, n = 0;
@@ -979,9 +980,10 @@ siox_foreground_extract (SioxState *state,
pixels += mapPR.w * mapPR.h;
if (n % 16 == 0)
siox_progress_update (progress_callback, progress_data,
siox_progress_update (progress_callback, progress_data,
0.1 + 0.1 * ((gdouble) pixels /
(gdouble) total));
}
}
else if (! (refinement & SIOX_REFINEMENT_ADD_BACKGROUND))
@@ -1016,10 +1018,10 @@ siox_foreground_extract (SioxState *state,
pixels += mapPR.w * mapPR.h;
if (n % 16 == 0)
siox_progress_update (progress_callback, progress_data,
siox_progress_update (progress_callback, progress_data,
0.1 + 0.1 * ((gdouble) pixels /
(gdouble) total));
}
}
}
else /* both changed */
{
@@ -1062,7 +1064,7 @@ siox_foreground_extract (SioxState *state,
siox_progress_update (progress_callback, progress_data,
0.1 + 0.1 * ((gdouble) pixels /
(gdouble) total));
}
}
}
if (refinement & SIOX_REFINEMENT_ADD_BACKGROUND)
@@ -1099,9 +1101,9 @@ siox_foreground_extract (SioxState *state,
g_free (surefg);
}
}
siox_progress_update (progress_callback, progress_data, 0.5);
/* Reduce the working area to the region of interest */
gimp_rectangle_intersect (x1, y1, x2 - x1, y2 - y1,
x, y, width, height,
@@ -1215,8 +1217,9 @@ siox_foreground_extract (SioxState *state,
pixels += mapPR.w * mapPR.h;
if (n % 8 == 0)
siox_progress_update (progress_callback, progress_data,
siox_progress_update (progress_callback, progress_data,
0.5 + 0.3 * ((gdouble) pixels / (gdouble) total));
}
#ifdef SIOX_DEBUG
@@ -1254,7 +1257,7 @@ siox_foreground_extract (SioxState *state,
/* dilate, to fill up boundary pixels killed by erode */
dilate_mask (mask, x, y, width, height);
siox_progress_update (progress_callback, progress_data, 1.0);
}
@@ -1279,28 +1282,43 @@ siox_foreground_extract (SioxState *state,
* needed to evaluate performance of this!
*/
void
siox_drb (SioxState *state,
TileManager *mask,
gint x,
gint y,
gint brush_radius,
gint brush_mode,
gfloat threshold)
siox_drb (SioxState *state,
TileManager *mask,
gint x,
gint y,
gint brush_radius,
SioxDRBType optionsrefinement,
gfloat threshold,
const gdouble sensitivity[3],
gboolean multiblob,
gint smoothness,
GimpVector2 *drbpoints,
gint drbnum)
{
PixelRegion srcPR;
PixelRegion mapPR;
gpointer pr;
gint row, col;
gfloat clustersize;
gfloat limits[3];
gint n;
gint p;
g_return_if_fail (state != NULL);
g_return_if_fail (mask != NULL && tile_manager_bpp (mask) == 1);
limits[0] = sensitivity[0];
limits[1] = sensitivity[1];
limits[2] = sensitivity[2];
clustersize = get_clustersize (limits);
pixel_region_init (&srcPR, state->pixels,
x - brush_radius, y - brush_radius, brush_radius * 2,
brush_radius * 2, FALSE);
pixel_region_init (&mapPR, mask, x - brush_radius, y - brush_radius,
brush_radius * 2, brush_radius * 2, TRUE);
x - state->offset_x, y - state->offset_y, state->width, state->height,
FALSE);
pixel_region_init (&mapPR, mask, x, y, state->width, state->height, TRUE);
for (pr = pixel_regions_register (2, &srcPR, &mapPR);
pr != NULL;
pr = pixel_regions_process (pr))
@@ -1315,70 +1333,197 @@ siox_drb (SioxState *state,
for (col = 0; col < srcPR.w; col++, m++, s += state->bpp)
{
gint key;
lab labpixel;
gfloat minbg, minfg, d;
classresult *cr;
gfloat mindistbg;
gfloat mindistfg;
gfloat alpha;
gint key;
gint i;
if (*m < SIOX_LOW || *m > SIOX_HIGH)
continue;
key = create_key (s, state->bpp, state->colormap);
cr = g_hash_table_lookup (state->cache, GINT_TO_POINTER (key));
if (! cr)
continue; /* Unknown color -
can only be sure background or sure forground */
cr = g_hash_table_lookup (state->cache, GINT_TO_POINTER (key));
mindistbg = (gfloat) sqrt (cr->bgdist);
mindistfg = (gfloat) sqrt (cr->fgdist);
if (brush_mode == SIOX_DRB_ADD)
if (cr)
{
if (*m > SIOX_HIGH)
continue;
*m = (cr->bgdist >= cr->fgdist) ? 254 : 0;
if (mindistfg == 0.0)
{
alpha = 1.0; /* avoid div by zero */
}
else
{
gdouble d = mindistbg / mindistfg;
alpha = MIN (d, 1.0);
}
#ifdef SIOX_DEBUG
++hits;
#endif
continue;
}
else /*if (brush_mode == SIOX_DRB_SUBTRACT)*/
#ifdef SIOX_DEBUG
++miss;
#endif
cr = g_slice_new0 (classresult);
calc_lab (s, state->bpp, state->colormap, &labpixel);
minbg = euklid (&labpixel, state->bgsig + 0);
for (i = 1; i < state->bgsiglen; i++)
{
if (*m < SIOX_HIGH)
continue;
d = euklid (&labpixel, state->bgsig + i);
if (mindistbg == 0.0)
{
alpha = 0.0; /* avoid div by zero */
}
else
{
gdouble d = mindistfg / mindistbg;
alpha = 1.0 - MIN (d, 1.0);
}
if (d < minbg)
minbg = d;
}
if (alpha < threshold)
cr->bgdist = minbg;
if (state->fgsiglen == 0)
{
/* background with a certain confidence
* to be decided by user.
*/
*m = 0;
if (minbg < clustersize)
minfg = minbg + clustersize;
else
minfg = 0.00001; /* This is a guess -
now we actually require a foreground
signature, !=0 to avoid div by zero
*/
}
else
{
*m = (gint) (255.999 * alpha);
minfg = euklid (&labpixel, state->fgsig + 0);
for (i = 1; i < state->fgsiglen; i++)
{
d = euklid (&labpixel, state->fgsig + i);
if (d < minfg)
{
minfg = d;
}
}
}
}
cr->fgdist = minfg;
g_hash_table_insert (state->cache, GINT_TO_POINTER (key), cr);
*m = minbg >= minfg ? 254 : 0;
}
src += srcPR.rowstride;
map += mapPR.rowstride;
}
}
/*
smooth_mask (mask, x, y, state->width, state->height);
erode_mask (mask, x, y, state->width, state->height);
find_max_blob (mask, x, y, state->width, state->height,
multiblob ?
MULTIBLOB_DEFAULT_SIZEFACTOR : MULTIBLOB_ONE_BLOB_ONLY);
for (n = 0; n < smoothness; n++)
smooth_mask (mask, x, y, state->width, state->height);
find_max_blob (mask, x, y, state->width, state->height,
multiblob ?
MULTIBLOB_DEFAULT_SIZEFACTOR : MULTIBLOB_ONE_BLOB_ONLY);
dilate_mask (mask, x, y, state->width, state->height);
*/
if (optionsrefinement & SIOX_DRB_ADD)
g_hash_table_foreach_remove(state->cache,siox_cache_remove_fg,NULL);
if (optionsrefinement & SIOX_DRB_SUBTRACT)
g_hash_table_foreach_remove(state->cache,siox_cache_remove_bg,NULL);
if (optionsrefinement & SIOX_DRB_CHANGE_THRESHOLD)
optionsrefinement = SIOX_DRB_RECALCULATE;
for (p = 0; p<drbnum; p++)
{
pixel_region_init (&srcPR, state->pixels,
drbpoints[p].x - brush_radius, drbpoints[p].y - brush_radius, brush_radius * 2,
brush_radius * 2, FALSE);
pixel_region_init (&mapPR, mask, drbpoints[p].x- brush_radius , drbpoints[p].y - brush_radius,
brush_radius * 2, brush_radius * 2, TRUE);
for (pr = pixel_regions_register (2, &srcPR, &mapPR);
pr != NULL;
pr = pixel_regions_process (pr))
{
const guchar *src = srcPR.data;
guchar *map = mapPR.data;
for (row = 0; row < srcPR.h; row++)
{
const guchar *s = src;
guchar *m = map;
for (col = 0; col < srcPR.w; col++, m++, s += state->bpp)
{
gint key;
classresult *cr;
gfloat mindistbg;
gfloat mindistfg;
gfloat alpha;
key = create_key (s, state->bpp, state->colormap);
cr = g_hash_table_lookup (state->cache, GINT_TO_POINTER (key));
if (! cr)
continue; /* Unknown color -
can only be sure background or sure forground */
mindistbg = (gfloat) sqrt (cr->bgdist);
mindistfg = (gfloat) sqrt (cr->fgdist);
if (optionsrefinement & SIOX_DRB_ADD)
{
if (*m > SIOX_HIGH)
continue;
if (mindistfg == 0.0)
{
alpha = 1.0; /* avoid div by zero */
}
else
{
gdouble d = mindistbg / mindistfg;
alpha = MIN (d, 1.0);
}
}
else if (optionsrefinement & SIOX_DRB_SUBTRACT) /*if (brush_mode == SIOX_DRB_SUBTRACT)*/
{
if (*m < SIOX_LOW)
continue;
if (mindistbg == 0.0)
{
alpha = 0.0; /* avoid div by zero */
}
else
{
gdouble d = mindistfg / mindistbg;
alpha = 1.0 - MIN (d, 1.0);
}
}
if (alpha < threshold)
{
/* background with a certain confidence
* to be decided by user.
*/
*m = 0;
}
else
{
*m = (gint) (255.999 * alpha);
}
}
src += srcPR.rowstride;
map += mapPR.rowstride;
}
}
}
}

View File

@@ -36,14 +36,15 @@
#define SIOX_DEFAULT_SMOOTHNESS 3
#define SIOX_DEFAULT_THRESHOLD 1.0
#define SIOX_DEFAULT_SENSITIVITY_L 0.64
#define SIOX_DEFAULT_SENSITIVITY_A 1.28
#define SIOX_DEFAULT_SENSITIVITY_B 2.56
/* FIXME: turn this into an enum */
#define SIOX_DRB_ADD 0
#define SIOX_DRB_SUBTRACT 1
//#define SIOX_DRB_ADD 0
//#define SIOX_DRB_SUBTRACT 1
typedef void (* SioxProgressFunc) (gpointer progress_data,
@@ -76,8 +77,13 @@ void siox_drb (SioxState *state,
gint x,
gint y,
gint brush_radius,
gint brush_mode,
gfloat threshold);
SioxDRBType optionsrefinement,
gfloat threshold,
const gdouble sensitivity[3],
gboolean multiblob,
gint smoothness,
GimpVector2 *drbpoints,
gint drbnum);
#endif /* __SIOX_H__ */

View File

@@ -26,6 +26,9 @@
#include "base/pixel-region.h"
#include "base/siox.h"
#include "base/tile-manager.h"
#include "/usr/include/gtk-1.2/gdk/gdkkeysyms.h"
#include "base/base-types.h"
#include "base/siox.c"
#include "gimpchannel.h"
#include "gimpdrawable.h"
@@ -63,8 +66,13 @@ gimp_drawable_foreground_extract (GimpDrawable *drawable,
gimp_drawable_foreground_extract_siox (mask, state,
SIOX_REFINEMENT_RECALCULATE,
SIOX_DEFAULT_SMOOTHNESS,
SIOX_DEFAULT_THRESHOLD,
SIOX_DRB_RECALCULATE,
sensitivity,
FALSE,
FALSE,
18,
NULL,
progress);
gimp_drawable_foreground_extract_siox_done (state);
@@ -115,8 +123,13 @@ gimp_drawable_foreground_extract_siox (GimpDrawable *mask,
SioxState *state,
SioxRefinementType refinement,
gint smoothness,
gfloat sioxdrbthreshold,
SioxDRBType sioxdrboption,
const gdouble sensitivity[3],
gboolean multiblob,
gboolean drbsignal,
gint brush_radius,
FgSelectStroke *drbpoints,
GimpProgress *progress)
{
gint x1, y1;
@@ -129,13 +142,12 @@ gimp_drawable_foreground_extract_siox (GimpDrawable *mask,
g_return_if_fail (progress == NULL || GIMP_IS_PROGRESS (progress));
if (progress)
if (progress && (!drbsignal))
gimp_progress_start (progress, _("Foreground Extraction"), FALSE);
if (progress && drbsignal)
gimp_progress_start (progress, _("Detail Refinement Brush"), FALSE);
if (GIMP_IS_CHANNEL (mask))
{
gimp_channel_bounds (GIMP_CHANNEL (mask), &x1, &y1, &x2, &y2);
}
gimp_channel_bounds (GIMP_CHANNEL (mask), &x1, &y1, &x2, &y2);
else
{
x1 = 0;
@@ -143,13 +155,30 @@ gimp_drawable_foreground_extract_siox (GimpDrawable *mask,
x2 = gimp_item_get_width (GIMP_ITEM (mask));
y2 = gimp_item_get_height (GIMP_ITEM (mask));
}
siox_foreground_extract (state, refinement,
gimp_drawable_get_tiles (mask), x1, y1, x2, y2,
smoothness, sensitivity, multiblob,
(SioxProgressFunc) gimp_progress_set_value,
progress);
if (!drbsignal)
{
siox_foreground_extract (state,
refinement,
gimp_drawable_get_tiles (mask),
x1, y1, x2, y2,
smoothness, sensitivity, multiblob,
(SioxProgressFunc) gimp_progress_set_value,
progress);
}
else
{
siox_drb (state,
gimp_drawable_get_tiles (mask),
state->x,state->y,
brush_radius,
sioxdrboption,
sioxdrbthreshold,
sensitivity,
multiblob,
smoothness,
drbpoints->points,
drbpoints->num_points);
}
if (progress)
gimp_progress_end (progress);
@@ -163,3 +192,11 @@ gimp_drawable_foreground_extract_siox_done (SioxState *state)
siox_done (state);
}

View File

@@ -20,6 +20,14 @@
/* general API (as seen from the PDB) */
typedef struct
{
gint width;
gboolean background;
gboolean refinement;
gint num_points;
GimpVector2 *points;
} FgSelectStroke;
void gimp_drawable_foreground_extract (GimpDrawable *drawable,
GimpForegroundExtractMode mode,
@@ -37,8 +45,13 @@ void gimp_drawable_foreground_extract_siox (GimpDrawable *mask,
SioxState *state,
SioxRefinementType refinemane,
gint smoothness,
gfloat sioxdrbthreshold,
SioxDRBType sioxdrboption,
const gdouble sensitivity[3],
gboolean multiblob,
gboolean drbsignal,
gint brush_radius,
FgSelectStroke *drbpoints,
GimpProgress *progress);
void gimp_drawable_foreground_extract_siox_done (SioxState *state);

View File

@@ -40,8 +40,11 @@ enum
PROP_ANTIALIAS,
PROP_CONTIGUOUS,
PROP_BACKGROUND,
PROP_DRB,
PROP_REFINEMENT,
PROP_STROKE_WIDTH,
PROP_SMOOTHNESS,
PROP_THRESHOLD,
PROP_MASK_COLOR,
PROP_EXPANDED,
PROP_SENSITIVITY_L,
@@ -89,6 +92,17 @@ gimp_foreground_select_options_class_init (GimpForegroundSelectOptionsClass *kla
"background", NULL,
FALSE,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_DRB,
"drb",
_("Detail refinement brush can use"),
FALSE,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_BOOLEAN (object_class, PROP_REFINEMENT,
"refinement", NULL,
FALSE,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_INT (object_class, PROP_STROKE_WIDTH,
"stroke-width",
@@ -103,6 +117,13 @@ gimp_foreground_select_options_class_init (GimpForegroundSelectOptionsClass *kla
"in the selection"),
0, 8, SIOX_DEFAULT_SMOOTHNESS,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_DOUBLE (object_class, PROP_THRESHOLD,
"threshold",
_("Range for SIOX_DRB_ADD:1.0"
"Range for SIOX_DRB_ADD:0.0"),
0.0, 1.0, SIOX_DEFAULT_THRESHOLD,
GIMP_PARAM_STATIC_STRINGS);
GIMP_CONFIG_INSTALL_PROP_ENUM (object_class, PROP_MASK_COLOR,
"mask-color", NULL,
@@ -161,6 +182,14 @@ gimp_foreground_select_options_set_property (GObject *object,
options->background = g_value_get_boolean (value);
break;
case PROP_DRB:
options->drb = g_value_get_boolean (value);
break;
case PROP_REFINEMENT:
options->refinement = g_value_get_boolean (value);
break;
case PROP_STROKE_WIDTH:
options->stroke_width = g_value_get_int (value);
break;
@@ -169,6 +198,10 @@ gimp_foreground_select_options_set_property (GObject *object,
options->smoothness = g_value_get_int (value);
break;
case PROP_THRESHOLD:
options->threshold = g_value_get_double (value);
break;
case PROP_MASK_COLOR:
options->mask_color = g_value_get_enum (value);
break;
@@ -216,6 +249,14 @@ gimp_foreground_select_options_get_property (GObject *object,
case PROP_BACKGROUND:
g_value_set_boolean (value, options->background);
break;
case PROP_DRB:
g_value_set_boolean (value, options->drb);
break;
case PROP_REFINEMENT:
g_value_set_boolean (value, options->refinement);
break;
case PROP_STROKE_WIDTH:
g_value_set_int (value, options->stroke_width);
@@ -225,6 +266,10 @@ gimp_foreground_select_options_get_property (GObject *object,
g_value_set_int (value, options->smoothness);
break;
case PROP_THRESHOLD:
g_value_set_double (value, options->threshold);
break;
case PROP_MASK_COLOR:
g_value_set_enum (value, options->mask_color);
break;
@@ -259,11 +304,15 @@ gimp_foreground_select_options_gui (GimpToolOptions *tool_options)
GtkWidget *hbox;
GtkWidget *button;
GtkWidget *frame;
GObject *drb = G_OBJECT (tool_options);
GtkWidget *frame_drb;
GtkWidget *scale;
GtkWidget *scale_t;
GtkWidget *label;
GtkWidget *menu;
GtkWidget *inner_frame;
GtkWidget *table;
GtkWidget *table_t;
GtkObject *adj;
gchar *title;
gint row = 0;
@@ -278,7 +327,7 @@ gimp_foreground_select_options_gui (GimpToolOptions *tool_options)
/* foreground / background */
title = g_strdup_printf (_("Interactive refinement (%s)"),
gimp_get_mod_string (GDK_CONTROL_MASK));
gimp_get_mod_string (GDK_CONTROL_MASK));
frame = gimp_prop_boolean_radio_frame_new (config, "background", title,
_("Mark background"),
@@ -288,6 +337,25 @@ gimp_foreground_select_options_gui (GimpToolOptions *tool_options)
gtk_box_pack_start (GTK_BOX (vbox), frame, FALSE, FALSE, 0);
gtk_widget_show (frame);
/* drb */
button = gimp_prop_check_button_new (drb, "drb", _("DRB"));
gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);
gtk_widget_show (button);
/* add / subtract */
title = g_strdup_printf (_("Detail Refinement Brush (%s)"),
gimp_get_mod_string (GDK_CONTROL_MASK));
frame_drb = gimp_prop_boolean_radio_frame_new (config, "refinement", title,
_("Subtract"),
_("Add"));
g_free (title);
gtk_box_pack_start (GTK_BOX (vbox), frame_drb, FALSE, FALSE, 0);
gtk_widget_show (frame_drb);
/* stroke width */
inner_frame = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (gtk_bin_get_child (GTK_BIN (frame))),
@@ -319,6 +387,19 @@ gimp_foreground_select_options_gui (GimpToolOptions *tool_options)
gtk_box_pack_start (GTK_BOX (inner_frame), scale, FALSE, FALSE, 0);
gtk_widget_show (scale);
/* threshold */
table_t = gtk_table_new (2, 3, FALSE);
gtk_table_set_row_spacings (GTK_TABLE (table_t), 2);
gtk_table_set_col_spacings (GTK_TABLE (table_t), 2);
gtk_box_pack_start (GTK_BOX (vbox), table_t, FALSE, FALSE, 0);
gtk_widget_show (table_t);
scale_t = gimp_prop_hscale_new (config, "threshold", 0.01, 0.1, 3);
gtk_range_set_update_policy (GTK_RANGE (scale_t), GTK_UPDATE_DELAYED);
gtk_scale_set_value_pos (GTK_SCALE (scale_t), GTK_POS_RIGHT);
gimp_table_attach_aligned (GTK_TABLE (table_t), 0, 0,
_("Threshold:"), 0.0, 0.5, scale_t, 2, FALSE);
/* smoothness */
table = gtk_table_new (2, 3, FALSE);
gtk_table_set_row_spacings (GTK_TABLE (table), 2);
@@ -331,7 +412,8 @@ gimp_foreground_select_options_gui (GimpToolOptions *tool_options)
gtk_scale_set_value_pos (GTK_SCALE (scale), GTK_POS_RIGHT);
gimp_table_attach_aligned (GTK_TABLE (table), 0, 0,
_("Smoothing:"), 0.0, 0.5, scale, 2, FALSE);
/* mask color */
menu = gimp_prop_enum_combo_box_new (config, "mask-color",
GIMP_RED_CHANNEL, GIMP_BLUE_CHANNEL);

View File

@@ -39,8 +39,11 @@ struct _GimpForegroundSelectOptions
gboolean contiguous;
gboolean background;
gboolean drb;
gboolean refinement;
gint stroke_width;
gint smoothness;
gdouble threshold;
GimpChannelType mask_color;
gboolean expanded;
gdouble sensitivity[3];

View File

@@ -51,16 +51,11 @@
#include "gimptoolcontrol.h"
#include "gimp-intl.h"
#include "base/siox.h"
#include "gdk/gdkkeysyms.h"
typedef struct
{
gint width;
gboolean background;
gint num_points;
GimpVector2 *points;
} FgSelectStroke;
#include "base/pixel-region.h"
#include "base/tile-manager.h"
static GObject * gimp_foreground_select_tool_constructor (GType type,
guint n_params,
@@ -117,7 +112,8 @@ static void gimp_foreground_select_tool_apply (GimpForegroundSelectTool *fg
GimpDisplay *display);
static void gimp_foreground_select_tool_stroke (GimpChannel *mask,
FgSelectStroke *stroke);
FgSelectStroke *stroke,
gboolean drb);
static void gimp_foreground_select_tool_push_stroke (GimpForegroundSelectTool *fg_select,
GimpDisplay *display,
@@ -127,6 +123,8 @@ static void gimp_foreground_select_options_notify (GimpForegroundSelectOptions
GParamSpec *pspec,
GimpForegroundSelectTool *fg_select);
static void gimp_scan_convert_compose_value_drb (GimpScanConvert *sc,
TileManager *tile_manager);
G_DEFINE_TYPE (GimpForegroundSelectTool, gimp_foreground_select_tool,
GIMP_TYPE_FREE_SELECT_TOOL)
@@ -158,7 +156,7 @@ gimp_foreground_select_tool_class_init (GimpForegroundSelectToolClass *klass)
GimpToolClass *tool_class = GIMP_TOOL_CLASS (klass);
GimpDrawToolClass *draw_tool_class = GIMP_DRAW_TOOL_CLASS (klass);
GimpFreeSelectToolClass *free_select_tool_class;
GimpFreeSelectToolClass *free_drb_select_tool_class;
free_select_tool_class = GIMP_FREE_SELECT_TOOL_CLASS (klass);
object_class->constructor = gimp_foreground_select_tool_constructor;
@@ -176,6 +174,7 @@ gimp_foreground_select_tool_class_init (GimpForegroundSelectToolClass *klass)
draw_tool_class->draw = gimp_foreground_select_tool_draw;
free_select_tool_class->select = gimp_foreground_select_tool_select;
}
static void
@@ -198,8 +197,11 @@ gimp_foreground_select_tool_init (GimpForegroundSelectTool *fg_select)
fg_select->stroke = NULL;
fg_select->strokes = NULL;
fg_select->mask = NULL;
fg_select->drbsignal = NULL;
fg_select->drbsignals = NULL;
}
static GObject *
gimp_foreground_select_tool_constructor (GType type,
guint n_params,
@@ -229,6 +231,12 @@ gimp_foreground_select_tool_finalize (GObject *object)
if (fg_select->strokes)
g_warning ("%s: strokes should be NULL at this point", G_STRLOC);
if (fg_select->drbsignal)
g_warning ("%s: drbsignal should be NULL at this point", G_STRLOC);
if (fg_select->drbsignals)
g_warning ("%s: drbsignals should be NULL at this point", G_STRLOC);
if (fg_select->state)
g_warning ("%s: state should be NULL at this point", G_STRLOC);
@@ -243,7 +251,7 @@ static void
gimp_foreground_select_tool_control (GimpTool *tool,
GimpToolAction action,
GimpDisplay *display)
{
{
GimpForegroundSelectTool *fg_select = GIMP_FOREGROUND_SELECT_TOOL (tool);
switch (action)
@@ -253,9 +261,9 @@ gimp_foreground_select_tool_control (GimpTool *tool,
break;
case GIMP_TOOL_ACTION_HALT:
{
{
GList *list;
GList *drblist;
gimp_foreground_select_tool_set_mask (fg_select, display, NULL);
for (list = fg_select->strokes; list; list = list->next)
@@ -265,14 +273,23 @@ gimp_foreground_select_tool_control (GimpTool *tool,
g_free (stroke->points);
g_slice_free (FgSelectStroke, stroke);
}
for (drblist = fg_select->drbsignals; drblist; drblist = drblist->next)
{
FgSelectStroke *drbsignal = drblist->data;
g_free (drbsignal->points);
g_slice_free (FgSelectStroke, drbsignal);
}
g_list_free (fg_select->strokes);
fg_select->strokes = NULL;
g_list_free (fg_select->drbsignals);
fg_select->drbsignals = NULL;
if (fg_select->state)
{
gimp_drawable_foreground_extract_siox_done (fg_select->state);
fg_select->state = NULL;
fg_select->state = NULL;
}
tool->display = NULL;
@@ -311,8 +328,13 @@ gimp_foreground_select_tool_oper_update (GimpTool *tool,
case SELECTION_MOVE:
case SELECTION_MOVE_COPY:
case SELECTION_ANCHOR:
if (fg_select->strokes)
status = _("Add more strokes or press Enter to accept the selection");
if (fg_select->strokes || fg_select->drbsignals)
{
if(!fg_select->drbsignals)
status = _("Add more strokes or click button DRB to drb");
else
status = _("Add more drb or press Enter to accept the selection");
}
else
status = _("Mark foreground by painting on the object to extract");
break;
@@ -374,7 +396,10 @@ gimp_foreground_select_tool_cursor_update (GimpTool *tool,
options = GIMP_FOREGROUND_SELECT_TOOL_GET_OPTIONS (tool);
gimp_tool_control_set_toggled (tool->control, options->background);
if (!options->drb)
gimp_tool_control_set_toggled (tool->control, options->background);
else
gimp_tool_control_set_toggled (tool->control, options->refinement);
switch (GIMP_SELECTION_TOOL (tool)->function)
{
@@ -404,10 +429,10 @@ gimp_foreground_select_tool_key_press (GimpTool *tool,
if (fg_select->state)
{
switch (kevent->keyval)
{
{
case GDK_Return:
case GDK_KP_Enter:
case GDK_ISO_Enter:
case GDK_ISO_Enter:
gimp_foreground_select_tool_apply (fg_select, display);
return TRUE;
@@ -435,21 +460,22 @@ gimp_foreground_select_tool_button_press (GimpTool *tool,
GimpButtonPressType press_type,
GimpDisplay *display)
{
GimpForegroundSelectTool *fg_select = GIMP_FOREGROUND_SELECT_TOOL (tool);
GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (tool);
GimpForegroundSelectTool *fg_select = GIMP_FOREGROUND_SELECT_TOOL (tool);
GimpDrawTool *draw_tool = GIMP_DRAW_TOOL (tool);
GimpForegroundSelectOptions *options = GIMP_FOREGROUND_SELECT_TOOL_GET_OPTIONS (tool);
if (fg_select->mask)
if (fg_select->mask &&(!options->drb))
{
GimpVector2 point = gimp_vector2_new (coords->x, coords->y);
gimp_draw_tool_pause (draw_tool);
if (gimp_draw_tool_is_active (draw_tool) && draw_tool->display != display)
gimp_draw_tool_stop (draw_tool);
gimp_draw_tool_stop (draw_tool);
if (! gimp_tool_control_is_active (tool->control))
gimp_tool_control_activate (tool->control);
gimp_tool_control_activate (tool->control);
fg_select->last_coords = *coords;
g_return_if_fail (fg_select->stroke == NULL);
@@ -458,8 +484,33 @@ gimp_foreground_select_tool_button_press (GimpTool *tool,
g_array_append_val (fg_select->stroke, point);
if (! gimp_draw_tool_is_active (draw_tool))
gimp_draw_tool_start (draw_tool, display);
gimp_draw_tool_start (draw_tool, display);
gimp_draw_tool_resume (draw_tool);
}
else if (fg_select->mask && options->drb)
{
GimpVector2 point = gimp_vector2_new (coords->x, coords->y);
gimp_draw_tool_pause (draw_tool);
if (gimp_draw_tool_is_active (draw_tool) && draw_tool->display != display)
gimp_draw_tool_stop (draw_tool);
if (! gimp_tool_control_is_active (tool->control))
gimp_tool_control_activate (tool->control);
fg_select->last_coords = *coords;
g_return_if_fail (fg_select->drbsignal == NULL);
fg_select->drbsignal = g_array_new (FALSE, FALSE, sizeof (GimpVector2));
g_array_append_val (fg_select->drbsignal, point);
if (! gimp_draw_tool_is_active (draw_tool))
gimp_draw_tool_start (draw_tool, display);
gimp_draw_tool_resume (draw_tool);
}
else
@@ -478,7 +529,7 @@ gimp_foreground_select_tool_button_release (GimpTool *tool,
GimpDisplay *display)
{
GimpForegroundSelectTool *fg_select = GIMP_FOREGROUND_SELECT_TOOL (tool);
if (fg_select->mask)
{
GimpForegroundSelectOptions *options;
@@ -511,16 +562,16 @@ gimp_foreground_select_tool_motion (GimpTool *tool,
GdkModifierType state,
GimpDisplay *display)
{
GimpForegroundSelectTool *fg_select = GIMP_FOREGROUND_SELECT_TOOL (tool);
if (fg_select->mask)
GimpForegroundSelectTool *fg_select = GIMP_FOREGROUND_SELECT_TOOL (tool);
GimpForegroundSelectOptions *options = GIMP_FOREGROUND_SELECT_TOOL_GET_OPTIONS (tool);
if (fg_select->mask && (!options->drb))
{
GimpVector2 *last = &g_array_index (fg_select->stroke,
GimpVector2,
fg_select->stroke->len - 1);
gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool));
fg_select->last_coords = *coords;
if (last->x != (gint) coords->x || last->y != (gint) coords->y)
@@ -532,6 +583,25 @@ gimp_foreground_select_tool_motion (GimpTool *tool,
gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool));
}
else if (fg_select->mask && options->drb)
{
GimpVector2 *last = &g_array_index (fg_select->drbsignal,
GimpVector2,
fg_select->drbsignal->len - 1);
gimp_draw_tool_pause (GIMP_DRAW_TOOL (tool));
fg_select->last_coords = *coords;
if (last->x != (gint) coords->x || last->y != (gint) coords->y)
{
GimpVector2 point = gimp_vector2_new (coords->x, coords->y);
g_array_append_val (fg_select->drbsignal, point);
}
gimp_draw_tool_resume (GIMP_DRAW_TOOL (tool));
}
else
{
GIMP_TOOL_CLASS (parent_class)->motion (tool,
@@ -569,7 +639,7 @@ gimp_foreground_select_tool_draw (GimpDrawTool *draw_tool)
options = GIMP_FOREGROUND_SELECT_TOOL_GET_OPTIONS (tool);
if (fg_select->stroke)
if (fg_select->stroke && (!options->drb))
{
gimp_display_shell_draw_pen (GIMP_DISPLAY_SHELL (draw_tool->display->shell),
(const GimpVector2 *)fg_select->stroke->data,
@@ -580,7 +650,17 @@ gimp_foreground_select_tool_draw (GimpDrawTool *draw_tool)
GIMP_ACTIVE_COLOR_FOREGROUND),
options->stroke_width);
}
if (fg_select->drbsignal && options->drb)
{
gimp_display_shell_draw_pen (GIMP_DISPLAY_SHELL (draw_tool->display->shell),
(const GimpVector2 *)fg_select->drbsignal->data,
fg_select->drbsignal->len,
GIMP_CONTEXT (options),
(options->refinement ?
GIMP_ACTIVE_COLOR_BACKGROUND :
GIMP_ACTIVE_COLOR_FOREGROUND),
options->stroke_width);
}
if (fg_select->mask)
{
GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (draw_tool->display->shell);
@@ -630,11 +710,13 @@ gimp_foreground_select_tool_select (GimpFreeSelectTool *free_sel,
GimpChannel *mask;
const GimpVector2 *points;
gint n_points;
gint radius;
drawable = gimp_image_get_active_drawable (image);
fg_select = GIMP_FOREGROUND_SELECT_TOOL (free_sel);
options = GIMP_FOREGROUND_SELECT_TOOL_GET_OPTIONS (free_sel);
if (fg_select->idle_id)
{
g_source_remove (fg_select->idle_id);
@@ -643,7 +725,7 @@ gimp_foreground_select_tool_select (GimpFreeSelectTool *free_sel,
if (! drawable)
return;
scan_convert = gimp_scan_convert_new ();
gimp_free_select_tool_get_points (free_sel,
@@ -666,28 +748,43 @@ gimp_foreground_select_tool_select (GimpFreeSelectTool *free_sel,
gimp_scan_convert_free (scan_convert);
if (fg_select->strokes)
{
{
GList *list;
GList *drblist;
gimp_set_busy (image->gimp);
/* apply foreground and background markers */
for (list = fg_select->strokes; list; list = list->next)
gimp_foreground_select_tool_stroke (mask, list->data);
if (!options->drb)
for (list = fg_select->strokes; list; list = list->next)
gimp_foreground_select_tool_stroke (mask, list->data, FALSE);
else if (options->drb)
for (drblist = fg_select->drbsignals; drblist; drblist = drblist->next)
gimp_foreground_select_tool_stroke (mask, drblist->data, TRUE);
if (fg_select->state)
gimp_drawable_foreground_extract_siox (GIMP_DRAWABLE (mask),
fg_select->state,
fg_select->refinement,
options->smoothness,
options->sensitivity,
! options->contiguous,
GIMP_PROGRESS (display));
{
if (options->drb)
for (drblist = fg_select->drbsignals; drblist->next; drblist = drblist->next);
gimp_drawable_foreground_extract_siox (GIMP_DRAWABLE (mask),
fg_select->state,
fg_select->refinement,
options->smoothness,
options->threshold,
fg_select->drbrefinement,
options->sensitivity,
! options->contiguous,
options->drb,
options->stroke_width/2,
drblist->data,
GIMP_PROGRESS (display));
fg_select->refinement = SIOX_REFINEMENT_NO_CHANGE;
fg_select->drbrefinement = SIOX_DRB_NO_CHANGE ;
gimp_unset_busy (image->gimp);
}
}
else
{
gint x1, y1;
@@ -699,6 +796,7 @@ gimp_foreground_select_tool_select (GimpFreeSelectTool *free_sel,
if (fg_select->state)
g_warning ("state should be NULL here");
fg_select->state =
gimp_drawable_foreground_extract_siox_init (drawable,
@@ -721,8 +819,8 @@ gimp_foreground_select_tool_set_mask (GimpForegroundSelectTool *fg_select,
options = GIMP_FOREGROUND_SELECT_TOOL_GET_OPTIONS (tool);
if (fg_select->mask == mask)
return;
return;
if (fg_select->mask)
{
g_object_unref (fg_select->mask);
@@ -730,12 +828,12 @@ gimp_foreground_select_tool_set_mask (GimpForegroundSelectTool *fg_select,
}
if (mask)
fg_select->mask = g_object_ref (mask);
fg_select->mask = g_object_ref (mask);
gimp_display_shell_set_mask (GIMP_DISPLAY_SHELL (display->shell),
GIMP_DRAWABLE (mask), options->mask_color);
if (mask)
if (mask && (!options->drb))
{
gimp_tool_control_set_tool_cursor (tool->control,
GIMP_TOOL_CURSOR_PAINTBRUSH);
@@ -744,6 +842,15 @@ gimp_foreground_select_tool_set_mask (GimpForegroundSelectTool *fg_select,
gimp_tool_control_set_toggled (tool->control, options->background);
}
else if (mask && options->drb)
{
gimp_tool_control_set_tool_cursor (tool->control,
GIMP_TOOL_CURSOR_PAINTBRUSH);
gimp_tool_control_set_toggle_tool_cursor (tool->control,
GIMP_TOOL_CURSOR_ERASER);
gimp_tool_control_set_toggled (tool->control, options->refinement);
}
else
{
gimp_tool_control_set_tool_cursor (tool->control,
@@ -779,7 +886,8 @@ gimp_foreground_select_tool_apply (GimpForegroundSelectTool *fg_select,
static void
gimp_foreground_select_tool_stroke (GimpChannel *mask,
FgSelectStroke *stroke)
FgSelectStroke *stroke,
gboolean drb)
{
GimpScanConvert *scan_convert = gimp_scan_convert_new ();
@@ -800,14 +908,20 @@ gimp_foreground_select_tool_stroke (GimpChannel *mask,
stroke->num_points, stroke->points,
FALSE);
}
gimp_scan_convert_stroke (scan_convert,
stroke->width,
GIMP_JOIN_ROUND, GIMP_CAP_ROUND, 10.0,
0.0, NULL);
gimp_scan_convert_compose_value (scan_convert,
gimp_drawable_get_tiles (GIMP_DRAWABLE (mask)),
0, 0, stroke->background ? 0 : 255);
if (!drb)
gimp_scan_convert_compose_value (scan_convert,
gimp_drawable_get_tiles (GIMP_DRAWABLE (mask)),
0, 0, stroke->background ? 0 : 255);
else
gimp_scan_convert_compose_value_drb (scan_convert,
gimp_drawable_get_tiles (GIMP_DRAWABLE (mask)));
gimp_scan_convert_free (scan_convert);
}
@@ -818,23 +932,44 @@ gimp_foreground_select_tool_push_stroke (GimpForegroundSelectTool *fg_select,
{
GimpDisplayShell *shell = GIMP_DISPLAY_SHELL (display->shell);
FgSelectStroke *stroke;
if (!options->drb)
{
g_return_if_fail (fg_select->stroke != NULL);
stroke = g_slice_new (FgSelectStroke);
stroke->background = options->background;
stroke->width = ROUND ((gdouble) options->stroke_width / shell->scale_y);
stroke->num_points = fg_select->stroke->len;
stroke->points = (GimpVector2 *) g_array_free (fg_select->stroke, FALSE);
g_return_if_fail (fg_select->stroke != NULL);
fg_select->stroke = NULL;
stroke = g_slice_new (FgSelectStroke);
fg_select->strokes = g_list_append (fg_select->strokes, stroke);
stroke->background = options->background;
stroke->width = ROUND ((gdouble) options->stroke_width / shell->scale_y);
stroke->num_points = fg_select->stroke->len;
stroke->points = (GimpVector2 *) g_array_free (fg_select->stroke, FALSE);
fg_select->refinement |= (stroke->background ?
SIOX_REFINEMENT_ADD_BACKGROUND :
SIOX_REFINEMENT_ADD_FOREGROUND);
}
else if (options->drb)
{
g_return_if_fail (fg_select->drbsignal != NULL);
fg_select->stroke = NULL;
stroke = g_slice_new (FgSelectStroke);
fg_select->strokes = g_list_append (fg_select->strokes, stroke);
stroke->refinement = options->refinement;
stroke->width = ROUND ((gdouble) options->stroke_width / shell->scale_y);
stroke->num_points = fg_select->drbsignal->len;
stroke->points = (GimpVector2 *) g_array_free (fg_select->drbsignal, FALSE);
fg_select->refinement |= (stroke->background ?
SIOX_REFINEMENT_ADD_BACKGROUND :
SIOX_REFINEMENT_ADD_FOREGROUND);
fg_select->drbsignal = NULL;
fg_select->drbsignals = g_list_append (fg_select->drbsignals, stroke);
fg_select->drbrefinement |= (stroke->refinement?
SIOX_DRB_SUBTRACT :
SIOX_DRB_ADD);
}
}
static gboolean
@@ -856,26 +991,50 @@ gimp_foreground_select_options_notify (GimpForegroundSelectOptions *options,
GimpForegroundSelectTool *fg_select)
{
SioxRefinementType refinement = 0;
SioxDRBType drbrefinement = 0;
if (!options->drb)
{
if (!fg_select->mask)
return;
if (! fg_select->mask)
return;
if (strcmp (pspec->name, "smoothness") == 0)
refinement = SIOX_REFINEMENT_CHANGE_SMOOTHNESS;
else if (strcmp (pspec->name, "contiguous") == 0)
refinement = SIOX_REFINEMENT_CHANGE_MULTIBLOB;
if (strcmp (pspec->name, "smoothness") == 0)
{
refinement = SIOX_REFINEMENT_CHANGE_SMOOTHNESS;
}
else if (strcmp (pspec->name, "contiguous") == 0)
{
refinement = SIOX_REFINEMENT_CHANGE_MULTIBLOB;
}
else if (g_str_has_prefix (pspec->name, "sensitivity"))
{
refinement = SIOX_REFINEMENT_CHANGE_SENSITIVITY;
}
else if (g_str_has_prefix (pspec->name, "sensitivity"))
refinement = SIOX_REFINEMENT_CHANGE_SENSITIVITY;
}
else
{
if (!fg_select->mask)
return;
if (refinement)
{
fg_select->refinement |= refinement;
if (strcmp (pspec->name, "threshold") == 0)
drbrefinement = SIOX_DRB_CHANGE_THRESHOLD;
else if (strcmp (pspec->name, "smoothness") == 0)
drbrefinement = SIOX_DRB_CHANGE_SMOOTHNESS;
else if (g_str_has_prefix (pspec->name, "sensitivity"))
drbrefinement = SIOX_DRB_CHANGE_SENSITIVITY;
}
if (refinement)
{
fg_select->refinement |= refinement;
if (fg_select->idle_id)
g_source_remove (fg_select->idle_id);
fg_select->idle_id =
g_idle_add_full (G_PRIORITY_LOW,
(GSourceFunc) gimp_foreground_select_tool_idle_select,
fg_select, NULL);
}
if (drbrefinement)
{
fg_select->drbrefinement |= drbrefinement;
if (fg_select->idle_id)
g_source_remove (fg_select->idle_id);
@@ -885,8 +1044,7 @@ gimp_foreground_select_options_notify (GimpForegroundSelectOptions *options,
(GSourceFunc) gimp_foreground_select_tool_idle_select,
fg_select, NULL);
}
if (g_str_has_prefix (pspec->name, "mask-color"))
if (g_str_has_prefix (pspec->name, "mask-color"))
{
GimpTool *tool = GIMP_TOOL (fg_select);
@@ -894,5 +1052,24 @@ gimp_foreground_select_options_notify (GimpForegroundSelectOptions *options,
gimp_display_shell_set_mask (GIMP_DISPLAY_SHELL (tool->display->shell),
GIMP_DRAWABLE (fg_select->mask),
options->mask_color);
}
}
static void
gimp_scan_convert_compose_value_drb (GimpScanConvert *sc,
TileManager *tile_manager)
{
PixelRegion maskPR;
gint x, y;
gint width, height;
x = 0;
y = 0;
width = tile_manager_width (tile_manager);
height = tile_manager_height (tile_manager);
pixel_region_init (&maskPR, tile_manager, x, y, width, height, TRUE);
}

View File

@@ -43,9 +43,12 @@ struct _GimpForegroundSelectTool
guint idle_id;
GArray *stroke;
GList *strokes;
GArray *drbsignal;
GList *drbsignals;
GimpChannel *mask;
SioxState *state;
SioxRefinementType refinement;
SioxDRBType drbrefinement;
};
struct _GimpForegroundSelectToolClass

View File

@@ -853,6 +853,7 @@ gimp_prop_boolean_radio_frame_new (GObject *config,
if (! param_spec)
return NULL;
g_object_get (config,
property_name, &value,
NULL);
@@ -3836,3 +3837,4 @@ connect_notify (GObject *config,
g_free (notify_name);
}

View File

@@ -39,7 +39,11 @@ GtkWidget * gimp_prop_boolean_radio_frame_new (GObject *config,
const gchar *title,
const gchar *true_text,
const gchar *false_text);
GtkWidget * gimp_prop_boolean_radio_frame_drb_new (GObject *config,//new
const gchar *property_name,//new
const gchar *title,//new
const gchar *true_text,//new
const gchar *false_text);//new
GtkWidget * gimp_prop_expander_new (GObject *config,
const gchar *property_name,
const gchar *label);
@@ -217,3 +221,4 @@ GtkWidget * gimp_prop_stock_image_new (GObject *config,
G_END_DECLS
#endif /* __GIMP_PROP_WIDGETS_H__ */

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,320 +0,0 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
#
msgid ""
msgstr ""
"Project-Id-Version: gimp_script_fu.head.pot\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-03-09 03:35+0000\n"
"PO-Revision-Date: 2007-03-27 15:37+0530\n"
"Last-Translator: sonam pelden <sonaa_peldn@yahoo.com>\n"
"Language-Team: Dzongkha <pgeyleg@dit.gov.bt>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: 2;(n!=1);\n"
"X-Poedit-Language: Dzongkha\n"
"X-Poedit-Country: Bhutan\n"
"X-Poedit-SourceCharset: CHARSET\n"
#: ../plug-ins/pygimp/gimpfu.py:335
msgid "Missing exception information"
msgstr "དམིགས་བསལ་བརྡ་དོན་བརླག་སྟོར་ཞུགས་ཡོདཔ་"
#: ../plug-ins/pygimp/gimpfu.py:344
#, python-format
msgid "An error occured running %s"
msgstr "%sགཡོག་བཀོལཝ་ད་ལུ་འཛོལ་བ་བྱུང་ཡོདཔ་"
#: ../plug-ins/pygimp/gimpfu.py:355
msgid "_More Information"
msgstr "བརྡ་དོན་ཧེང་བཀལ། (_M)"
#: ../plug-ins/pygimp/gimpfu.py:461
#: ../plug-ins/pygimp/gimpfu.py:473
#: ../plug-ins/pygimp/gimpfu.py:479
msgid "No"
msgstr "མེན་"
#: ../plug-ins/pygimp/gimpfu.py:471
#: ../plug-ins/pygimp/gimpfu.py:479
msgid "Yes"
msgstr "ཨིན་"
#: ../plug-ins/pygimp/gimpfu.py:517
#: ../plug-ins/pygimp/gimpui.py:222
msgid "Python-Fu File Selection"
msgstr "པ་ཡི་ཐཱོན་-ཕུ་ཡིག་སྣོད་སེལ་འཐུ་"
#: ../plug-ins/pygimp/gimpfu.py:528
msgid "Python-Fu Folder Selection"
msgstr "པའི་ཐཱོན་-ཕུ་སྣོད་འཛིན་སེལ་འཐུ་"
#: ../plug-ins/pygimp/gimpfu.py:618
#, python-format
msgid "Invalid input for '%s'"
msgstr "'%s'གི་དོན་ལུ་ནུས་ཅན་མེད་པའི་ཨིན་པུཊི་"
#: ../plug-ins/pygimp/gimpui.py:175
msgid "Python-Fu Color Selection"
msgstr "པའི་ཐཱོན་-ཕུ་ཚོས་གཞི་སེལ་འཐུ་"
#: ../plug-ins/pygimp/plug-ins/colorxhtml.py:107
msgid "Saving as colored XHTML"
msgstr "ཨེགསི་ཨེཆ་ཊི་ཨེམ་ཨེལ་ཚོས་གཞི་གཏང་ཡོདཔ་སྦེ་ སྲུང་དོ་"
#: ../plug-ins/pygimp/plug-ins/colorxhtml.py:184
msgid "Save as colored XHTML"
msgstr "ཨེགསི་ཨེཆ་ཊི་ཨེམ་ཨེལ་ཚོས་གཞི་གཏང་ཡོདཔ་སྦེ་སྲུང་དོ་"
#: ../plug-ins/pygimp/plug-ins/colorxhtml.py:189
msgid "Colored XHTML"
msgstr "ཚོས་གཞི་གཏང་པའི་ཨེགསི་ཨེཆ་ཊི་ཨེམ་ཨེལ་"
#: ../plug-ins/pygimp/plug-ins/colorxhtml.py:192
msgid "Character _source"
msgstr "ཡིག་འབྲུའི་བྱུང་ཁུངས། (_s)"
#: ../plug-ins/pygimp/plug-ins/colorxhtml.py:193
msgid "Source code"
msgstr "བྱུང་ཁུངས་ཨང་"
#: ../plug-ins/pygimp/plug-ins/colorxhtml.py:194
msgid "Text file"
msgstr "ཚིག་ཡིག་ཡིག་སྣོད་"
#: ../plug-ins/pygimp/plug-ins/colorxhtml.py:195
msgid "Entry box"
msgstr "ཐོ་བཀོད་སྒྲོམ་"
#: ../plug-ins/pygimp/plug-ins/colorxhtml.py:196
msgid "_File to read or characters to use"
msgstr "ལྷག་ནིའི་དོན་ལུ་ཡིག་སྣོད་དང་ལག་ལེན་འཐབ་ནི་ལུ་ཡིག་འབྲུ་ཚུ། (_F)"
#: ../plug-ins/pygimp/plug-ins/colorxhtml.py:198
msgid "Fo_nt size in pixels"
msgstr "པིག་སེལསི་ནང་ཡིག་གཟུགས་ཀྱི་ཚད། (_n)"
#: ../plug-ins/pygimp/plug-ins/colorxhtml.py:199
msgid "_Write a separate CSS file"
msgstr "སི་ཨེསི་ཨེསི་ཡིག་སྣོད་སོ་སོ་གཅིག་འབྲི། (_W)"
#: ../plug-ins/pygimp/plug-ins/gimpcons.py:46
msgid "Python Console"
msgstr "ཨིསི་ཀིརིཔིཊི་_ཕུ་མ་སྒྲོམ།"
#: ../plug-ins/pygimp/plug-ins/gimpcons.py:50
msgid "_Browse..."
msgstr "བརྡ་འཚོལ...(_B)"
#: ../plug-ins/pygimp/plug-ins/gimpcons.py:132
msgid "Python Procedure Browser"
msgstr "པའི་ཐཱོན་བྱ་སྒོའི་ལམ་ལུགས་བརྡ་འཚོལ་པ་"
#: ../plug-ins/pygimp/plug-ins/gimpcons.py:161
#, python-format
msgid "Could not open '%s' for writing: %s"
msgstr "འབྲི་ནིའི་དོན་ལུ་ '%s' འདི་ཁ་ཕྱེ་མ་ཚུགས: %s"
#: ../plug-ins/pygimp/plug-ins/gimpcons.py:176
#, python-format
msgid "Could not write to '%s': %s"
msgstr "'%s' ལུ་འབྲི་མ་ཚུགས: %s"
#: ../plug-ins/pygimp/plug-ins/gimpcons.py:184
msgid "Save Python-Fu Console Output"
msgstr "པའི་ཐཱོན་-ཕུ་མ་སྒྲོམ་ཨའུཊི་པུཊི་སྲུང་"
#: ../plug-ins/pygimp/plug-ins/gimpcons.py:218
msgid "Interactive Gimp-Python interpreter"
msgstr "ཕན་ཚུན་འབྲེལ་བའི་ཇིམ་-པའི་ཐཱོན་ཁ་བསྒྱུར་མི་"
#: ../plug-ins/pygimp/plug-ins/gimpcons.py:223
msgid "_Console"
msgstr "མ་སྒྲོམ། (_C)"
#: ../plug-ins/pygimp/plug-ins/foggify.py:51
msgid "Add a layer of fog"
msgstr "ན་བུན་བང་རིམ་གཅིག་ཁ་སྐོང་བརྐྱབ་"
#: ../plug-ins/pygimp/plug-ins/foggify.py:56
msgid "_Fog..."
msgstr "ན་བུན... (_F)"
#: ../plug-ins/pygimp/plug-ins/foggify.py:59
msgid "_Layer name"
msgstr "བང་རིམ་གྱི་མིང་ (_L)"
#: ../plug-ins/pygimp/plug-ins/foggify.py:59
msgid "Clouds"
msgstr "ས་སྨུག་"
#: ../plug-ins/pygimp/plug-ins/foggify.py:60
msgid "_Fog color"
msgstr "ན་བུན་ཚོས་གཞི། (_F)"
#: ../plug-ins/pygimp/plug-ins/foggify.py:61
msgid "_Turbulence"
msgstr "དྲག་འགྱུར། (_T)"
#: ../plug-ins/pygimp/plug-ins/foggify.py:62
msgid "Op_acity"
msgstr "དྭངས་སྒྲིབ། (_a)"
#: ../plug-ins/pygimp/plug-ins/palette-offset.py:45
msgid "Offset the colors in a palette"
msgstr "པེ་ལེཊི་གཅིག་ནང་ཚོས་གཞི་ཚུ་བྱིནམ་ཨིན་"
#: ../plug-ins/pygimp/plug-ins/palette-offset.py:50
msgid "_Offset Palette..."
msgstr "པེ་ལེཊི་པར་ལེན... (_O)"
#: ../plug-ins/pygimp/plug-ins/palette-offset.py:53
#: ../plug-ins/pygimp/plug-ins/palette-sort.py:57
#: ../plug-ins/pygimp/plug-ins/palette-to-gradient.py:57
#: ../plug-ins/pygimp/plug-ins/palette-to-gradient.py:79
msgid "Palette"
msgstr "པེ་ལེཊི་"
#: ../plug-ins/pygimp/plug-ins/palette-offset.py:54
msgid "Off_set"
msgstr "པར་ལེན། (_s)"
#: ../plug-ins/pygimp/plug-ins/palette-sort.py:49
msgid "Sort the colors in a palette"
msgstr "པེ་ལེཊི་གཅིག་ནང་ཚོས་གཞི་འདི་དབྱེ་སེལ་འབད་"
#: ../plug-ins/pygimp/plug-ins/palette-sort.py:54
msgid "_Sort Palette..."
msgstr "པེ་ལེཊི་དབྱེ་སེལ་འབད... (_S)"
#: ../plug-ins/pygimp/plug-ins/palette-sort.py:58
msgid "Color _model"
msgstr "ཚོས་གཞི་དཔེ། (_m)"
#: ../plug-ins/pygimp/plug-ins/palette-sort.py:59
msgid "RGB"
msgstr "ཨར་ཇི་བི་"
#: ../plug-ins/pygimp/plug-ins/palette-sort.py:60
msgid "HSV"
msgstr "ཨེཆ་ཨེསི་ཝི་"
#: ../plug-ins/pygimp/plug-ins/palette-sort.py:61
msgid "Channel to _sort"
msgstr "དབྱེ་སེལ་འབད་ནི་ལུ་རྒྱུ་ལམ། (_s)"
#: ../plug-ins/pygimp/plug-ins/palette-sort.py:62
msgid "Red or Hue"
msgstr "དམརཔོ་ཡང་ན་ཚོན་མདངས་"
#: ../plug-ins/pygimp/plug-ins/palette-sort.py:63
msgid "Green or Saturation"
msgstr "ལྗང་ཁུ་ཡང་ན་མཐའ་ཚད་"
#: ../plug-ins/pygimp/plug-ins/palette-sort.py:64
msgid "Blue or Value"
msgstr "ཧོནམ་ཡང་ན་གནས་གོང་"
#: ../plug-ins/pygimp/plug-ins/palette-sort.py:65
msgid "_Ascending"
msgstr "ཡར་འཛེགས། (_A)"
#: ../plug-ins/pygimp/plug-ins/palette-to-gradient.py:50
msgid "Create a repeating gradient using colors from the palette"
msgstr "པེ་ལེཊི་ལས་ཚོས་གཞི་ལག་ལེན་འཐབ་སྟེ་ སྟེགས་རིས་ཡར་བསྐྱར་གཅིག་གསར་བསྐྲུན་འབད་"
#: ../plug-ins/pygimp/plug-ins/palette-to-gradient.py:55
msgid "Palette to _Repeating Gradient"
msgstr "ཡང་བསྐྱར་སྟེགས་རིས་ལུ་པེ་ལེཊི། (_R)"
#: ../plug-ins/pygimp/plug-ins/palette-to-gradient.py:72
msgid "Create a gradient using colors from the palette"
msgstr "པེ་ལེཊི་ལས་ཚོས་གཞི་ལག་ལེན་འཐབ་སྟེ་ སྟེགས་རིས་གཅིག་གསར་བསྐྲུན་འབད་"
#: ../plug-ins/pygimp/plug-ins/palette-to-gradient.py:77
msgid "Palette to _Gradient"
msgstr "སྟེགས་རིས་ལུ་པེ་ལེཊི། (_G)"
#: ../plug-ins/pygimp/plug-ins/py-slice.py:57
msgid "Slice"
msgstr "བགོ་བཤའ་"
#: ../plug-ins/pygimp/plug-ins/py-slice.py:416
msgid "Cuts an image along its guides, creates images and a HTML table snippet"
msgstr "དེའི་ལམ་སྟོན་པ་ལས་རྒྱུད་དེ་གཟུགས་བརྙན་ཅིག་ གཟུགས་བརྙན་གསར་བསྐྲུན་འབད་ནི་དང་ ཨེཆ་ཊི་ཨེམ་ཨེལ་ཐིག་ཁྲམ་ཕྲ་དུམ་ཚུ་བཏོག་ནི།"
#: ../plug-ins/pygimp/plug-ins/py-slice.py:427
msgid "_Slice..."
msgstr "བགོ་བཤའ... (_S)"
#: ../plug-ins/pygimp/plug-ins/py-slice.py:430
msgid "Path for HTML export"
msgstr "ཨེཆ་ཊི་ཨེམ་ཨེལ་ཕྱིར་འདྲེན་དོན་ལུ་འགྲུལ་ལམ་"
#: ../plug-ins/pygimp/plug-ins/py-slice.py:431
msgid "Filename for export"
msgstr "ཕྱིར་འདྲེན་དོན་ལུ་ཡིག་སྣོད་མིང་"
#: ../plug-ins/pygimp/plug-ins/py-slice.py:432
msgid "Image name prefix"
msgstr "གཟུགས་བརྙན་མིང་སྔོན་ཚིག་"
#: ../plug-ins/pygimp/plug-ins/py-slice.py:433
msgid "Image format"
msgstr "གཟུགས་བརྙན་རྩ་སྒྲིག་"
#: ../plug-ins/pygimp/plug-ins/py-slice.py:434
msgid "Separate image folder"
msgstr "གཟུགས་བརྙན་སྣོད་ཐོ་སོ་སོ་འཕྱལ་"
#: ../plug-ins/pygimp/plug-ins/py-slice.py:436
msgid "Folder for image export"
msgstr "གཟུགས་བརྙན་ཕྱིར་འདྲེན་གྱི་དོན་ལུ་ སྣོད་ཐོ་"
#: ../plug-ins/pygimp/plug-ins/py-slice.py:437
msgid "Space between table elements"
msgstr "ཐིག་ཁྲམ་ཆ་ཤས་ཚུ་གི་བར་ན་བར་སྟོང་"
#: ../plug-ins/pygimp/plug-ins/py-slice.py:439
msgid "Javascript for onmouseover and clicked"
msgstr "ཨོན་མཱའུསི་ཨོ་བར་དང་ཨེབ་གཏང་གི་དོན་ལུ་ཇ་བ་ཡིག་ཚུགས་"
#: ../plug-ins/pygimp/plug-ins/py-slice.py:441
msgid "Skip animation for table caps"
msgstr "ཐིག་ཁྲམ་ཀེཔ་ཚུ་གི་དོན་ལུ་བསྒུལ་བཟོ་གོམ་འགྱོ་"
#: ../plug-ins/pygimp/plug-ins/shadow_bevel.py:61
msgid "Add a drop shadow to a layer, and optionally bevel it"
msgstr "བང་རིམ་གཅིག་ལུ་མར་བཞག་གྱིབ་མ་འདི་དང་གདམ་ཁའི་ཐོག་ལས་སེར་ཁ་འདི་ཁ་སྐོང་བརྐྱབ་"
#: ../plug-ins/pygimp/plug-ins/shadow_bevel.py:66
msgid "_Drop Shadow and Bevel..."
msgstr "སེར་ཁ་དང་གྱིབ་མ་བཞག... (_D)"
#: ../plug-ins/pygimp/plug-ins/shadow_bevel.py:69
msgid "_Shadow blur"
msgstr "གྱིབ་མ་རབ་རིབ། (_S)"
#: ../plug-ins/pygimp/plug-ins/shadow_bevel.py:70
msgid "_Bevel"
msgstr "སེར་ཁ། (_B)"
#: ../plug-ins/pygimp/plug-ins/shadow_bevel.py:71
msgid "_Drop shadow"
msgstr "གྱིབ་མ་བཞག། (_D)"
#: ../plug-ins/pygimp/plug-ins/shadow_bevel.py:72
msgid "Drop shadow _X displacement"
msgstr "གྱིབ་མ་ X གནས་སྤང་བཞག། (_X)"
#: ../plug-ins/pygimp/plug-ins/shadow_bevel.py:73
msgid "Drop shadow _Y displacement"
msgstr "གྱིབ་མ་ Y གནས་སྤང་བཞག། (_Y)"
#, fuzzy
#~ msgid "Gimp-Python Console"
#~ msgstr "ཨིསི་ཀིརིཔིཊི་_ཕུ་མ་སྒྲོམ།"

File diff suppressed because it is too large Load Diff

View File

@@ -1,174 +0,0 @@
# translation of gimp-tips.HEAD.po to Dzongkha
# This file is distributed under the same license as the PACKAGE package.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER.
# Dorji Tashi <dorjee_doss@hotmail.com>, 2006.
#
msgid ""
msgstr ""
"Project-Id-Version: gimp-tips.HEAD\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-06-07 03:44+0100\n"
"PO-Revision-Date: 2007-06-19 12:48+0530\n"
"Last-Translator: yumkee lhamo <yumkeyl08@hotmail.com>\n"
"Language-Team: Dzongkha <pgeyleg@dit.gov.bt>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.10.2\n"
"Plural-Forms: nplurals=2;plural=(n!=1)\n"
#: ../data/tips/gimp-tips.xml.in.h:1
msgid "<big>Welcome to the GNU Image Manipulation Program!</big>"
msgstr "</big>ཇི་ཨིན་ཡུ་ མ་ནུ་པ་ལེ་ཤན་ ལས་རིམ་ལུ་ བྱོན་པ་ལེགས་སོ་ཡོད!</big>"
#: ../data/tips/gimp-tips.xml.in.h:2
msgid "<tt>Ctrl</tt>-click with the Bucket Fill tool to have it use the background color instead of the foreground color. Similarly, <tt>Ctrl</tt>-clicking with the eyedropper tool sets the background color instead of the foreground color."
msgstr "<tt>Ctrl</tt>-གདོང་གཞིའི་ཚོས་གཞི་གི་ཚབ་ལུ་རྒྱབ་གཞི་ཚོས་གཞི་ལག་ལེན་འཐབ་ནི་ལུ་ བ་ཀེཊི་བཀང་བའི་ལག་ཆས་དང་ཅིག་ཁར་ཨེབ་གཏང་འབད། ཆ་འདྲ་བ་འབད་ <tt>Ctrl</tt>- ཚོས་གཞི་འདེམས་བྱེད་ལག་ཆས་དང་ཅིག་ཁར་ཨེབ་གཏང་འབད་མི་དེ་གིས་ གདོང་གཞི་ཚོས་གཞིའི་ཚབ་ལུ་རྒྱབ་གཞི་ཚོས་གཞི་འདི་ གཞི་སྒྲིག་འབདཝ་ཨིན།"
#: ../data/tips/gimp-tips.xml.in.h:3
msgid "<tt>Ctrl</tt>-clicking on the layer mask's preview in the Layers dialog toggles the effect of the layer mask. <tt>Alt</tt>-clicking on the layer mask's preview in the Layers dialog toggles viewing the mask directly."
msgstr "<tt>Ctrl</tt>-བང་རིམ་ཌའི་ལོག་བང་རིམ་གདོང་ཁེབས་སྔོན་ལྟ་གུ་ཨེབ་གཏང་འབད་མི་དེ་གིས་ བང་རིམ་གདོང་ཁེབས་གྱི་ནུས་པ་འདི་སོར་སྟོན་འབདཝ་ཨིན། <tt>Alt</tt>- བང་རིམ་ཌའི་ལོག་ནང་བང་རིམ་གདོང་ཁེབས་སྔོན་ལྟ་གུ་ཨེབ་གཏང་འབད་མི་དེ་གིས་ གདོང་ཁེབས་ཐད་ཀར་དུ་མཐོང་མི་དེ་ལུ་སོར་སྟོན་འབདཝ་ཨིན།"
#: ../data/tips/gimp-tips.xml.in.h:4
msgid "<tt>Ctrl</tt>-drag with the Rotate tool will constrain the rotation to 15 degree angles."
msgstr "<tt>ཚད་འཛིན་</tt>-བསྒྱིར་ནིའི་ལག་ཆས་དང་གཅིག་ཁར་འདྲུད་མི་དེ་གིས་ བསྒྱིར་ནི་དེ་ དབྱེ་རིམ་གྲུ་ཟུར་༡༥་ཚུན་དམ་འོང་། "
#: ../data/tips/gimp-tips.xml.in.h:5
msgid "<tt>Shift</tt>-click on the eye icon in the Layers dialog to hide all layers but that one. <tt>Shift</tt>-click again to show all layers."
msgstr "<tt>སོར་ལྡེ་</tt>བང་རིམ་ཆ་མཉམ་སྦ་བཞག་ནིའི་དོན་ལུ་ བང་རིམ་ཌའི་ལོག་ནང་གི་ མིག་ཏོ་ངོས་པར་གུར་ ཨེབ་གཏང་འབད་ དོ་འབདཝ་ད་ འ་ཕི་<tt>སོར་ལྡེ་</tt>-བང་རིམ་ཆ་མཉམ་སྟོན་ནིའི་དོན་ལུ་ ལོག་ཨེབ་གཏང་འབད།"
#: ../data/tips/gimp-tips.xml.in.h:6
msgid "A floating selection must be anchored to a new layer or to the last active layer before doing other operations on the image. Click on the &quot;New Layer&quot; or the &quot;Anchor Layer&quot; button in the Layers dialog, or use the menus to do the same."
msgstr "འཕུར་ལྡིང་འབད་ཡོད་པའི་སེལ་འཐུ་དེ་ བང་རིམ་གསརཔ་ལུ་དང་ ཡང་ན་ གཟུགས་བརྙན་གུ་ལུ་བཀོལ་སྤྱོད་མ་འབད་བའི་ཧེ་མ་ མཇུག་མམ་གྱི་ཤུགས་ལྡན་བང་རིམ་ལུ་ ཨེན་ཀོར་འབད་དགོ &quot;གུར་ཨེབ་གཏང་འབད། བང་རིམ་གསརཔ་&quot; ཡང་ན་ &quot;དེ། ཨེན་ཀོར་འབད་ནི་བང་རིམ་&quot; བང་རིམ་ཚུ་གུ་ཌའི་ལོག་ནང་གི་ཨེབ་རྟ་ ཡང་ན་ ཅོག་གཅིགཔ་སྦེ་འབད་ནི་དོན་ལུ་ དཀར་ཆག་ལག་ལེན་འཐབ།"
#: ../data/tips/gimp-tips.xml.in.h:7
msgid "After you enabled &quot;Dynamic Keyboard Shortcuts&quot; in the Preferences dialog, you can reassign shortcut keys. Do so by bringing up the menu, selecting a menu item, and pressing the desired key combination. If &quot;Save Keyboard Shortcuts&quot; is enabled, the key bindings are saved when you exit GIMP. You should probably disable &quot;Dynamic Keyboard Shortcuts&quot; afterwards, to prevent accidentally assigning/reassigning shortcuts."
msgstr "དགའ་གདམ་ཌའི་ལོག་ནང་ ཁྱོད་ཀྱིས་&quot;ནུས་ཅན་ལྡེ་སྒྲོམ་མགྱོགས་ཐབས་&quot; དེ་ ཤུགས་ཅན་བཟོ་ཚར་བའི་ཤུལ་ལས་ ཁྱོད་ཀྱིས་མགྱོགས་ཐབས་ལྡེ་མིག་ཚུ་འགན་སྤྲོད་འབད་ཚུགས། དེ་ཡང་ དཀར་ཆག་ཡར་འབག་འོང་སྟེ་འབད་ནི་དང་ དཀར་ཆག་གི་རྣམ་གྲངས་སེལ་འཐུ་འབད་བའི་ཐོག་ལས་དང་ རེ་འདུན་ཅན་གྱི་མཉམ་མཐུད་ལྡེ་སྒྲོམ་ཨེབ་པའི་ཐོག་ལས་འབད་དགོཔ་ཨིན། &quot;ལྡེ་སྒྲོམ་མགྱོགས་ཐབས་སྲུང་བཞག་འབད་ནི་&quot;དེ་ལྕོགས་ཅན་བཟོ་ཚར་བ་ཅིན་ ཁྱོད་ཀྱིས་ཇི་ཨའི་ཨེམ་པི་དེ་ཕྱིར་ཐོན་འབད་བའི་སྐབས་ལུ་ ཀི་བཱའིན་ཌིང་ཚུ་ སྲུང་བཞག་འབདཝ་ཨིན། ཁྱོད་ཀྱིས་ ཤུལ་ལས་&quot; ནུས་ཅན་ལྡེ་སྒྲོམ་མགྱོགས་ཐབས་&quot; འདི་ལྕོགས་མེད་བཟོ་དགོ་ དེ་ཡང་ གློ་བུར་དུ་འགན་སྤྲོད་འབད་ནི་/ལོག་འགན་སྤྲོད་འབད་བའི་མགྱོགས་ཐབས་ཚུ་སྔོན་བཀག་འབད་ནི་ལུ་ཨིན།"
#: ../data/tips/gimp-tips.xml.in.h:8
msgid "Click and drag on a ruler to place a guide on an image. All dragged selections will snap to the guides. You can remove guides by dragging them off the image with the Move tool."
msgstr "ལམ་སྟོན་པ་དེ་ གཟུགས་བརྙན་གུར་བཞག་ནིའི་དོན་ལུ་ ཐིག་ཤིང་གུར་ཨེབ་གཏང་འབད་དེ་འདྲུད། འདྲུད་མི་སེལ་འཐུ་ཆ་མཉམ་གྱི་ ལམ་སྟོན་པ་ལུ་པར་བཏབ་ཨིན། ཁྱོད་ཀྱིས་ ལམ་སྟོན་པ་ཚུ་ གཟུགས་བརྙན་གུ་ལས་སྤོ་བཤུད་ལག་ཆས་གཅིག་ཁར་ ཕྱི་ཁར་ལུ་ འདྲུད་པའི་ཐོག་ལས་ རྩ་བསྐྲད་གཏང་ཚུགས། "
#: ../data/tips/gimp-tips.xml.in.h:9
msgid "GIMP allows you to undo most changes to the image, so feel free to experiment."
msgstr "ཇི་ཨའི་ཨེམ་པི་གིས་ བསྒྱུར་བཅོས་མང་ཤོས་རང་གཟུགས་བརྙན་ལུ་འབད་བཤོལ་བཞག་བཅུགཔ་ཨིན་ དེ་འབདཝ་ལས་ ཐེ་ཚོམ་ག་ནི་ཡང་མེད་པར་ བརྟག་དཔྱད་འབད།"
#: ../data/tips/gimp-tips.xml.in.h:10
msgid "GIMP supports gzip compression on the fly. Just add <tt>.gz</tt> (or <tt>.bz2</tt>, if you have bzip2 installed) to the filename and your image will be saved compressed. Of course loading compressed images works too."
msgstr "ཇི་ཨའི་ཨེམ་པི་གིས་ ཇི་ཛིབ་ཨེབ་བཙུགས་དེ་ ཕ་ལའི་གུར་རྒྱབ་སྐྱོར་འབདཝ་ཨིན།<tt>.gz</tt>(ཡང་ན་ ཁྱོད་ཀྱིས་ བི་ཛིབ་༢་དེ་གཞི་བཙུགས་འབད་དེ་ཡོད་པ་ཅིན་ཡང་ན་ <tt>.gz</tt>)དེ་ ཡིག་སྣོད་མིང་ལུ་ཁ་སྐོང་རྐྱབས་དང་ ཁྱོད་ཀྱི་གཟུགས་བརྙན་དེ་ཨེབ་བཙུགས་སྦེ་སྲུང་བཞག་འབད་བཞག་འོང་། དེ་མ་ཚད་ཨེབ་བཙུགས་འབད་ཡོད་པའི་གཟུགས་བརྙན་ལཱ་གཡོག་ཚུ་ མངོན་གསལ་འབད་ནི་ཡང་ ངེས་བདེན་སྲུང་བཞག་འབད་ཚུགས།"
#: ../data/tips/gimp-tips.xml.in.h:11
msgid "GIMP uses layers to let you organize your image. Think of them as a stack of slides or filters, such that looking through them you see a composite of their contents."
msgstr "ཇི་ཨའི་ཨེམ་པི་གིས་ ཁྱོད་ཀྱིས་ཁྱོད་རའི་གཟུགས་བརྙན་འགོ་འདྲེན་འཐབ་བཅུག་ནིའི་དོན་ལུ་ བང་རིམ་ཚུ་ལག་ལེན་འཐབ་ཨིན། ཁྱོད་ཀྱིས་དེ་ཚུ་ བཤུད་བརྙན་གྱི་བརྩེགས་ཕུང་དང་ཡང་ན་ ཚགས་མ་སྦེ་མནོ་་མནོ་བསམ་བཏངདེ་ཚེ་བརྒྱུད་དེ་བལྟ་མི་དེ་གིས་ དེ་ཚུའི་ནང་དོན་གྱི་སྣ་སྡུད་ཅིག་མཐོང་ཚུགས།་ཏེ་ "
#: ../data/tips/gimp-tips.xml.in.h:12
msgid "If a layer's name in the Layers dialog is displayed in <b>bold</b>, this layer doesn't have an alpha-channel. You can add an alpha-channel using Layer→Transparency→Add Alpha Channel."
msgstr "བང་རིམ་ཌའི་ལོག་ནང་གི་བང་རིམ་གྱི་མིང་དེ་ <b>རྒྱགས་པ་</b>,ནང་ལུ་བསྐྲམ་སྟོན་འབད་དེ་ཡོད་པ་ཅིན་ བང་རིམ་འདི་ལུ་ ཨཱལ་ཕ་རྒྱུ་ལམ་དེ་མེདཔ་ཨིན། ཁྱོད་ཀྱིས་ བང་རིམ་→དྭངས་གསལ་ཅན་→དེ་ལག་ལེན་འཐབ་པའི་ཐོག་ལས་ ཨཱལ་ཕ་རྒྱུ་ལམ་དེ་ ཁ་སྐོང་རྐྱབ་ཚུགས། ཨཱལ་ཕ་རྒྱུ་་ལམ་ཁ་སྐོང་རྐྱབས།"
#: ../data/tips/gimp-tips.xml.in.h:13
msgid "If some of your scanned photos do not look colorful enough, you can easily improve their tonal range with the &quot;Auto&quot; button in the Levels tool (Colors→Levels). If there are any color casts, you can correct them with the Curves tool (Colors→Curves)."
msgstr "ཁྱོད་ཀྱིས་ཞིབ་ལྟ་འབད་ཚར་མི་པར་ཚུ་ ཚོས་གཞི་དང་ལྡནམ་སྦེ་མ་མཐོང་པ་ཅིན་ ཁྱོད་ཀྱིས་ དེ་ཚུ་གི་ཊོ་ནལ་ཁྱབ་ཚད་ཚུ་ &quot;Auto&quot;གནས་རིམ་ནང་གི་ལག་ཆས་ཚུ་གི་ཐོག་ལས་་ལེགས་བཅོས་བཏང་ཚུགས་ (ཚོས་གཞི་→གནས་རིམ་→ཚུ་) དེ་ནང་ལུ་ཚོས་གཞི་གི་ཁྱད་པར་ཡོད་པ་ཅིན་ ཁྱོད་ཀྱིས་ གུག་གུག་པའི་ལག་ཆས་ཀྱི་ཐོག་ལས་ ནོར་བཅོས་འབད་ཚུགས། (ཚོས་གཞི་ཚུ་→གུག་གུགཔ་)"
#: ../data/tips/gimp-tips.xml.in.h:14
msgid "If you stroke a path (Edit→Stroke Path), the paint tools can be used with their current settings. You can use the Paintbrush in gradient mode or even the Eraser or the Smudge tool."
msgstr "ཁྱོད་ཀྱིས་འགྲུལ་ལམ་ཅིག་སིཊོཀ་འབད་བ་ཅིན་(ཞུན་དག་→འགྲུལ་ལམ་སི་ཊོག་འབད་) ཚོན་གཏང་ནིའི་ལག་ཆས་ཚུ་ དེ་ཚུའི་ད་ལྟོའི་སྒྲིག་སྟངས་ཚུ་དང་ཅིག་ཁར་ལག་ལེན་འཐབ་བཏུབ། ཁྱོད་ཀྱིས་ཚོན་གཏང་པྱིར་འདི་སྟེགས་རིས་ཐབས་ལམ་ནང་ལུ་ ཡང་ན་ གསད་ནི་ཡང་ན་རབ་རིབ་ལག་ཆས་ནང་ལག་ལེན་འཐབ་བཏུབ།"
#: ../data/tips/gimp-tips.xml.in.h:15
msgid "If your screen is too cluttered, you can press <tt>Tab</tt> in an image window to toggle the visibility of the toolbox and other dialogs."
msgstr "ཁྱོད་ཀྱི་གསལ་གཞི་དེ་གནམ་མེད་ས་མེད་ཟིང་ཆ་ཅན་ཅིག་ཨིན་པ་ཅིན་ ལག་ཆས་སྒྲོམ་དང་གཞན་མི་ཌའི་ལོག་ཚུ་སོར་སྟོན་འབད་ནི་ལུ་ ཁྱོད་ཀྱིས་གཟུགས་བརྙན་སྒོ་སྒྲིག་ནང་གི་<tt>མཆོང་ལྡེ་</tt>འདི་ཨེབ་གཏང་།"
#: ../data/tips/gimp-tips.xml.in.h:16
msgid "Most plug-ins work on the current layer of the current image. In some cases, you will have to merge all layers (Image→Flatten Image) if you want the plug-in to work on the whole image."
msgstr "པ་ལག་ཨིནསི་མང་ཤོས་རང་ ད་ལྟོའི་གཟུགས་བརྙན་གྱི་བང་རིམ་གུར་ལཱ་འབདག་བཏུབ་ཨིན། གནད་དོན་ལ་ལུ་ཅིག་ནང་ལུ་ པ་ལག་ཨིན་དེ་གཟུགས་བརྙན་ཧྲིལ་བུམ་གུར་ལཱ་འབད་དགོ་པ་ཅིན་ ཁྱོད་ཀྱིས་བང་རིམ་ཚུ་ཆ་མཉམ་མཉམ་བསྡོམས་འབད་དགོ(གཟུགས་བརྙན་→གཟུགས་བརྙན་ལེབ་ཏེམ་བཟོ་) "
#: ../data/tips/gimp-tips.xml.in.h:17
msgid "Not all effects can be applied to all kinds of images. This is indicated by a grayed-out menu-entry. You may need to change the image mode to RGB (Image→Mode→RGB), add an alpha-channel (Layer→Transparency→Add Alpha Channel) or flatten it (Image→Flatten Image)."
msgstr "ནུས་པ་ཚུ་ཆ་མཉམ་ གཟུགས་བརྙན་དབྱེ་ཁག་ཆ་མཆམ་ལུ་འཇུག་སྤྱོད་འབད་མི་བཏུབ། འདི་ཡང་ grayed-out དཀར་ཆག-ཐོ་བཀོད་ཀྱིས་བརྡ་སྟོནམ་ཨིན། ཁྱོད་ཀྱིས་གཟུགས་བརྙན་ཐབས་ལམ་དེ་ ཨཱར་བི་ཇི་ལུ་ བསྒྱུར་བཅོས་འབད་དགོཔ་འོང་། (གཟུགས་བརྙན་→ཐབས་ལམ་→ཨཱར་ཇི་བི་),ཨཱལ་ཕ་རྒྱུ་ལམ་ཁ་སྐོང་རྐྱབས་(བང་རིམ་→དྭངས་གསལ་→ཨཱལ་ཕ་རྒྱུ་ལམ་ཁ་སྐོང་རྐྱབས་) ཡང་ན་དེ་ལེབ་ཏེམ་བཟོ་(གཟུགས་བརྙན་→གཟུགས་བརྙན་ལེབ་ཏེམ་བཟོ)"
#: ../data/tips/gimp-tips.xml.in.h:18
msgid "Pressing and holding the <tt>Shift</tt> key before making a selection allows you to add to the current selection instead of replacing it. Using <tt>Ctrl</tt> before making a selection subtracts from the current one."
msgstr "ལྡེ་མིག་<tt>སོར་ལྡེ་</tt>དེ་ སེལ་འཐུ་མ་འབད་བའི་ཧེ་མ་ ཨེབ་ནི་དང་ འཆང་མི་དེ་གིས་ ཚབ་བཙུགས་ནི་གི་ཚབ་ལུ་ ད་ལྟོའི་སེལ་འཐུ་ལུ་ཁ་སྐོང་འབད་བཅུགཔ་ཨིན།སེལ་འཐུ་མ་འབད་བའི་ཧེ་མ་<tt>ཚད་འཛིན་</tt>དེལག་ལེན་འཐབ་མི་དེ་གིས་ ད་ལྟོ་གི་ནང་ལས་ཕབ་ཨིན།"
#: ../data/tips/gimp-tips.xml.in.h:19
msgid "To create a circle-shaped selection, hold <tt>Shift</tt> while doing an ellipse select. To place a circle precisely, drag horizontal and vertical guides tangent to the circle you want to select, place your cursor at the intersection of the guides, and the resulting selection will just touch the guides."
msgstr "དབྱིབས་སྒོར་ཐིག་ཅན་དབྱིབས་སེལ་འཐུ་དེ་གསར་བསྐྲུན་འབད་ནི་དོན་ལུ་ སྒོང་དབྱིབས་སེལ་འཐུ་འབད་བའི་སྐབས་ལུ་ <tt>དེ་འཆང་</tt>སོར་གནང་། སྒོར་ཐིག་ཀྲིག་ཀྲིག་འབད་བཀལ་ནིའི་དོན་ལུ་ ཁྱོད་ཀྱིས་སེལ་འཐུ་སེལ་འཐུ་འབད་དགོ་མནོ་མི་སྒོར་ཐིག་དེ་ལུ་ ཐད་སྙོམས་དང་ཀེར་ཕྲེང་སྦེ་ཡོད་མི་ ལམ་སྟོན་ཊེན་ཇེནཊི་དོ་འདྲུད། ཁྱོད་ཀྱི་འོད་རྟགས་དེ་ལམ་སྟོན་པའི་འཛོམས་ས་ལུ་བཞག་ནི་དང་ འདི་ནང་ལས་གྲུབ་འབྲས་བྱིང་མི་སེལ་འཐུ་དེ་གིས་ ལམ་སྟོན་པ་ལུ་རེགཔ་ཨིན།"
#: ../data/tips/gimp-tips.xml.in.h:20
msgid "When you save an image to work on it again later, try using XCF, GIMP's native file format (use the file extension <tt>.xcf</tt>). This preserves the layers and every aspect of your work-in-progress. Once a project is completed, you can save it as JPEG, PNG, GIF, ..."
msgstr "ཁྱོད་ཀྱིས་གཟུགས་བརྙན་དེ་ཤུལ་ལས་ཁོ་ར་ལུ་ལོག་ལཱ་འབད་བཏུབ་མི་སྲུང་བཞག་འབདཝ་སྐབས་ལུ་ ཨེགསི་སི་ཨེཕ་དང་ ཇི་ཨའི་ཨེམ་པི་གི་ནེ་ཊིབ་ཡིག་སྣོད་རྩ་སྒྲིག་དེ་ལག་ེན་འཐབ་པའི་ཐོག་ལས་འབད་རྩོལ་བསྐྱེད་(ཡིག་སྣོད་རྒྱ་བསྐྱེད་ལག་ལེན་འཐབ་<tt>.xcf</tt>).འདི་གིས་ཁྱོད་ཀྱི་བང་རིམ་དང་ ལཱ་གི་རྣམ་པ་ཡར་འཕེལ་བཏང་སྟེ་བཞག་ནི་ཚུ་ཉམས་སྲུང་འབདཝ་ཨིན། ལས་འགུལ་དེ་ཚར་ཅིག་མཇུག་བསྡུ་ཞིནམ་ལས་ ཁྱོད་ཀྱིས་དེ་ ཇེ་པི་ཨི་ཇི་ པི་ཨེན་ཀེ་ ཇི་ཨའི་ཨེཕ་སྦེ་སྲུང་བཞག་འབད་ཚུགས།"
#: ../data/tips/gimp-tips.xml.in.h:21
msgid "You can adjust or move a selection by using <tt>Alt</tt>-drag. If this makes the window move, your window manager uses the <tt>Alt</tt> key already."
msgstr "ཁྱོད་ཀྱིས་<tt>གདམ་ལྡེ</tt>-འདྲུད་ དེ་ལག་ལེན་འཐབ་པའི་ཐོག་ལས་ སེལ་འཐུ་དེ་བདེ་སྒྲིག་འབད་ནི་དང་ ཡང་ན སྤོ་བཤུད་འབད་ནི་ཚུགས། འདི་གིས་ཁྱོད་ཀྱི་སྒོ་སྒྲིག་སྤོ་བཤུད་འབད་བཅུག་པ་ཅིན་ ཁྱོད་ཀྱི་སྒོ་སྒྲིག་འཛིན་སྐྱོང་པ་དེ་གིས་ <tt>གདམ་ལྡེ་</tt>ཧེ་མ་ལས་རང་ལྡེ་མིག་ལག་ལེན་འཐབ་ཨིན། "
#: ../data/tips/gimp-tips.xml.in.h:22
msgid "You can create and edit complex selections using the Path tool. The Paths dialog allows you to work on multiple paths and to convert them to selections."
msgstr "ཁྱོད་ཀྱིས་འགྲུལ་ལམ་ལག་ཆས་ལག་ལེན་འཐབ་པའི་ཐོག་ལས གོ་བཀའ་བའི་སེལ་འཐུ་ཚུ་ གསར་བསྐྲུན་འབད་ནི་དང་ ཞུན་དག་འབད་ཚུགས། འགྲུལ་ལམ་ཚུ་ཌའི་ལོག་གིས་ ཁྱོད་ལམ་སྣ་མང་གུར་ལཱ་འབད་ནི་དང་ དེ་ཚུ་སེལ་འཐུ་ལུ་གཞི་བསྒྱུར་འབད་བཅུགཔ་ཨིན།ུ་"
#: ../data/tips/gimp-tips.xml.in.h:23
msgid "You can drag a layer from the Layers dialog and drop it onto the toolbox. This will create a new image containing only that layer."
msgstr "ཁྱོད་ཀྱིས་བང་རིམ་དེ་ བང་རིམ་ཚུ་གི་དའི་ལོག་དེ་ནང་ལས་འདྲུད་དེ་ འ་ནི་དེ་ལག་ཆས་སྒྲོམ་ནང་ལུ་སར་འཇོག་འབད་ཚུགས། འདི་གིས་འ་ཕི་བང་རིམ་རྐྱངམ་ཅིག་ཡོད་མི་གཟུགས་བརྙན་གསརཔ་ཅིག་གསར་བསྐྲུན་འབད་འོང་།"
#: ../data/tips/gimp-tips.xml.in.h:24
msgid "You can drag and drop many things in GIMP. For example, dragging a color from the toolbox or from a color palette and dropping it into an image will fill the current selection with that color."
msgstr "ཁྱོད་ཀྱིས་ ཇི་ཨའི་ཨེམ་པི་ནང་ལུ་ ལེ་ཤ་ཅིག་རང་འདྲུད་དེ་ སར་འཇོག་འབད་ཚུགས། དཔེ་འབད་བ་ཅིན་ ཚོས་གཞི་ཅིག་ ལག་ཆས་སྒྲོམ་ནང་ལས་དང་ ཡང་ན་ ཚོས་གཞི་པེ་ལིཊི་ནང་ལས་ འདྲུད་དེ་ གཟུགས་བརྙན་ནང་ལུ་སར་འཇོག་འབད་མི་དེ་གིས་ ད་ལྟོའི་གཟུགས་བརྙན་ ཡང་ན་ སེལ་འཐུ་དེ་ཚོས་གཞི་དང་གཅིག་ཁར་བཀང་འོང་།"
#: ../data/tips/gimp-tips.xml.in.h:25
msgid "You can draw simple squares or circles using Edit→Stroke Selection. It strokes the edge of your current selection. More complex shapes can be drawn using the Path tool or with Filters→Render→Gfig."
msgstr "ཁྱོད་ཀྱིས་གྲུ་བཞི་ཡང་ན་ སྒོར་ཐིག་འཇམ་སམ་ཚུ་ ཞུན་དག་→སི་ཊོག་ སེལ་འཐུ་ དེ་ལག་ལེན་འཐབ་པའི་ཐོག་ལས་འབྲི་ཚུགས། གོ་བཀའ་བའི་དབྱིབས་ཧེང་བཀལ་ འགྲུལ་ལམ་ལག་ཆས་ ཡང་ན་ ཚགས་མ་→ལྷག་སྟོན་འབད་ནི་→ཇི་ཕིག་དེ་གི་ཐོག་ལསའབྲི་ཚུགས།"
#: ../data/tips/gimp-tips.xml.in.h:26
msgid "You can get context-sensitive help for most of GIMP's features by pressing the F1 key at any time. This also works inside the menus."
msgstr "ཁྱོད་ཀྱིས་སྐབས་དོན་- ཚོར་ཅན་གྲོགས་རམ་འདི་ དུས་ཚོད་ནམ་རང་འབད་རུང་ ཨེཕ་༡་ལྡེ་མིག་དེ་ཨེབ་པའི་ཐོག་ལས་ ཇི་ཨའི་ཨེམ་པི་གི་ཁྱད་རྣམ་ཚུ་མང་ཤོས་ཀྱི་དོན་ལུ་ འཐོབ་ཚུགས། འདི་གིས་དཀར་ཆག་ནང་ལུ་ཡང་ལཱ་འབད་བཏུབ་ཨིན།"
#: ../data/tips/gimp-tips.xml.in.h:27
msgid "You can perform many layer operations by right-clicking on the text label of a layer in the Layers dialog."
msgstr "ཁྱོད་ཀྱིས་བང་རིམ་ཚུ་གི་ཌའི་ལོག་ནང་ལུ་ བང་རིམ་གྱི་ཚིག་ཡིག་ཁ་ཡིག་གུར་གཡས་ལུ་ ཨེབ་གཏང་འབད་བའི་ཐོག་ལས བང་རིམ་ལེ་ཤ་གི་བཀོལ་སྤྱོད་ཀྱི་ལཱ་འགན་འགྲུབ་ཚུགས།"
#: ../data/tips/gimp-tips.xml.in.h:28
msgid "You can save a selection to a channel (Select→Save to Channel) and then modify this channel with any paint tools. Using the buttons in the Channels dialog, you can toggle the visibility of this new channel or convert it to a selection."
msgstr "ཁྱོད་ཀྱིས་སེལ་འཐུ་དེ་རྒྱུ་་ལམ་ལུ་སྲུང་བཞག་འབད་ཚུགས་(སེལ་འཐུ་→རྒྱུ་་ལམ་ལུ་སྲུང་བཞག་འབད་) དེ་ལས་ ཚོན་གཏང་ནིའི་ལག་ཆས་གང་རུང་ཅིག་གིས་ཐོག་ལས རྒྱ་ལམ་འདི་ལེགས་བཅོས་འབད། རྒྱུ་་ལམ་ཌའི་ལོག་ནང་གི་ཨེབ་རྟ་ལག་ལེན་འཐབ་མི་དེ་གིས་ ཁྱོད་ཀྱིས་རྒྱུ་ལམ་གསརཔ་འདི་གི་མཐོང་གསལ་སོར་སྟོན་འབད་ཚུགས་ཡང་ན་ སེལ་འཐུ་ལུ་གཞི་བསྒྱུར་འབད་ཚུགས།"
#: ../data/tips/gimp-tips.xml.in.h:29
msgid "You can use <tt>Ctrl</tt>-<tt>Tab</tt> to cycle through all layers in an image (if your window manager doesn't trap those keys...)."
msgstr "ཁྱོད་ཀྱིས་ བང་རིམ་ཆ་མཉམ་བརྒྱུད་དེ་གཟུགས་བརྙན་ནང་ལུ་ བསྐྱར་འཁོར་འབད་ནིའི་དོན་ལུ་ <tt>གདམ་ལྡེ</tt>-<tt>མཆོང་ལྡེ་</tt>དེ་ལག་ལེན་འཐབ་ཚུགས་(ཁྱོད་རའི་སྒོ་སྒྲིག་འཛིན་སྐྱོང་པ་དེ་གིས་ ལྡེ་མིག་དེ་ཚུ་དམ་བཟུང་མ་འབད་བ་ཅིན་...)"
#: ../data/tips/gimp-tips.xml.in.h:30
msgid "You can use the middle mouse button to pan around the image (or optionally hold <tt>Spacebar</tt> while you move the mouse)."
msgstr "གཟུགས་བརྙན་གྱི་མཐའ་སྐོར་ཏེ་པཱན་འབད་ནིའི་དོན་ལུ་ ཁྱོད་ཀྱིས་བར་ན་གི་མའུསུ་ཨེབ་རྟ་འདི་ལག་ལེན་འཐབ་ཆོག་(ཡང་ན་གདམ་ཁ་ཅན་གྱི་ཐོག་ལས་ <tt>བར་སྟོང་ཕྲ་རིང་</tt> འདི་ཁྱོད་ཀྱིས་མཱའུསི་སྤོ་བཤུད་འབད་བའི་སྐབས་འཆང་་)།"
#: ../data/tips/gimp-tips.xml.in.h:31
msgid "You can use the paint tools to change the selection. Click on the &quot;Quick Mask&quot; button at the bottom left of an image window. Change your selection by painting in the image and click on the button again to convert it back to a normal selection."
msgstr "ཁྱོད་ཀྱིས་སེལ་འཐུ་དེ་བསྒྱུར་བཅོས་འབད་ནིའི་དོན་ལུ་ ཚོན་གཏང་ནིའི་ལག་ཆས་ལག་ལེན་འཐབ།&quot;འཕྲལ་མགྱོགས་གདོང་ཁེབས་&quot;གཟུགས་བརྙན་སྒོ་སྒྲིག་གི་གཤམ་གྱི་གཡོན་ལུ་ཡོད་མི་ཨེབ་རྟ་ལུ་ ཨེབ་གཏང་འབད། ཁྱོད་ཀྱི་སེལ་འཐུ་དེ་ གཟུགས་བརྙན་ནང་ལུ་་ཚོན་གཏང་པའི་ཐོག་ལས་བསྒྱུར་བཅོས་འབད་ དེ་ལས་ པྱིར་གཏང་སེལ་འཐུ་ལུ་ལོག་གཞི་བསྒྱུར་འབད་ནིའི་དོན་ལུ་ ཨེབ་རྟ་ལུ་ལོག་ཨེབ་གཏང་འབད།"
#~ msgid ""
#~ "<tt>Alt</tt>-click on the layer mask's preview in the Layers dialog "
#~ "toggles viewing the mask directly."
#~ msgstr ""
#~ "<tt>གདམ་ལྡེ་</tt>-གདོང་ཁེབས་ལུ་ཐད་ཀར་སྦེ་བལྟ་བའི་ཐོག་ལས་ བང་རིམ་ཌའིི་ལོག་སོར་སྟོན་ནང་ལུ་ཡོན་"
#~ "མི་ བང་རིམ་གདོང་ཁེབས་ཀྱི་སྔོན་བལྟའི་གུར་ ཨེབ་གཏང་འབད།"
#~ msgid ""
#~ "When using a drawing tool (Paintbrush, Airbrush, or Pencil), <tt>Shift</"
#~ "tt>-click will draw a straight line from your last drawing point to your "
#~ "current cursor position. If you also press <tt>Ctrl</tt>, the line will "
#~ "be constrained to 15 degree angles."
#~ msgstr ""
#~ "པར་འབྲི་ནིའི་ལག་ཆས་ལག་ལེན་འཐབ་པའི་སྐབས་སུ་ (ཚོན་བཏང་ནིའི་པྱིར་,རླུང་པྱིར་, ཡང་ན་ ཞ་མྱུག),"
#~ "<tt>སོར་ལྡེ་</tt>-ཨེབ་གཏང་འབད་མི་དེ་གིས་ ཁྱོད་ཀྱི་མཐའ་མཇུག་ལུ་འབྲི་མི་ཡིག་ཚད་ལས་ ཁྱོད་རའི་ད་"
#~ "ལྟོའི་འོད་རྟགས་གནས་ས་ཚུན་ལུ་ གྲལ་ཐིག་ཕྲང་ཏང་ཏ་ཅིག་འབྲི་འོང་། དོ་རུང་ཁྱོད་ཀྱིས་<tt>Ctrl</tt>,"
#~ "ཨེབ་མི་དེ་གིས་ གྲལ་ཐིག་དེ་དབྱེ་རིམ་ཟུར་ཁུག་༡༥་ཚུན་ལུ་དམ་བཞག་འོང་།"
#~ msgid ""
#~ "You can adjust the selection range for fuzzy select by clicking and "
#~ "dragging left and right."
#~ msgstr ""
#~ "ཁྱོད་ཀྱིས་ཕུ་ཛི་སེལ་འཐུའི་དོན་ལུ་ གཡོན་དང་གནས་ལུ་ཨེབ་གཏང་འབད་དེ་དང་ འདྲུད་པའི་ཐོག་ལས་ སེལ་འཐུ་"
#~ "དེ་བདེ་སྒྲིག་འབད་ཚུགས།"
#~ msgid ""
#~ "You can press or release the <tt>Shift</tt> and <tt>Ctrl</tt> keys while "
#~ "you are making a selection in order to constrain it to a square or a "
#~ "circle, or to have it centered on its starting point."
#~ msgstr ""
#~ "གྲུ་བཞི་ཡང་ན་ སྒོར་ཐིག་ ཡང་ན་ འགོ་བཙུགས་གནས་ལུ་དབུས་སྒྲིག་འབད་བཞག་ནི་ལུ་དམ་ནིའི་དོན་ལུ་ སེལ་"
#~ "འཐུ་འབད་བའི་སྐབས་སུ་ ཁྱོད་ཀྱིས་<tt>སོར་ལྡེ་</tt> དང་ <tt>ཚད་འཛིན་</tt> སྡེ་མིག་དེ་ ཨེབ་ཡང་"
#~ "ན་འཛིན་གྲོལ་འབད་ཚགས།"

12385
po/dz.po

File diff suppressed because it is too large Load Diff