mirror of https://github.com/GNOME/gimp.git
plug-ins: port file-tiff to GimpImage|Drawable|Vectors, etc.
This commit is contained in:
parent
adc4f8e589
commit
e6b141ffe4
|
@ -22,7 +22,6 @@ AM_LDFLAGS = $(mwindows)
|
|||
libexecdir = $(gimpplugindir)/plug-ins/file-tiff
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-DGIMP_DEPRECATED_REPLACE_NEW_API \
|
||||
-I$(top_srcdir) \
|
||||
$(GTK_CFLAGS) \
|
||||
$(EXIF_CFLAGS) \
|
||||
|
|
|
@ -70,11 +70,11 @@ typedef struct
|
|||
|
||||
typedef struct
|
||||
{
|
||||
gint32 ID;
|
||||
GeglBuffer *buffer;
|
||||
const Babl *format;
|
||||
guchar *pixels;
|
||||
guchar *pixel;
|
||||
GimpDrawable *drawable;
|
||||
GeglBuffer *buffer;
|
||||
const Babl *format;
|
||||
guchar *pixels;
|
||||
guchar *pixel;
|
||||
} ChannelData;
|
||||
|
||||
typedef enum
|
||||
|
@ -105,7 +105,7 @@ static void load_separate (TIFF *tif,
|
|||
gboolean is_bw,
|
||||
gint extra);
|
||||
static void load_paths (TIFF *tif,
|
||||
gint image,
|
||||
GimpImage *image,
|
||||
gint width,
|
||||
gint height,
|
||||
gint offset_x,
|
||||
|
@ -149,7 +149,7 @@ tiff_get_page_name (TIFF *tif)
|
|||
GimpPDBStatusType
|
||||
load_image (GFile *file,
|
||||
GimpRunMode run_mode,
|
||||
gint32 *image,
|
||||
GimpImage **image,
|
||||
gboolean *resolution_loaded,
|
||||
gboolean *profile_loaded,
|
||||
GError **error)
|
||||
|
@ -166,7 +166,7 @@ load_image (GFile *file,
|
|||
gint max_col = 0;
|
||||
gint li;
|
||||
|
||||
*image = 0;
|
||||
*image = NULL;
|
||||
gimp_progress_init_printf (_("Opening '%s'"),
|
||||
gimp_file_get_utf8_name (file));
|
||||
|
||||
|
@ -315,7 +315,7 @@ load_image (GFile *file,
|
|||
gint rows;
|
||||
gboolean alpha;
|
||||
gint image_type = GIMP_RGB;
|
||||
gint layer;
|
||||
GimpLayer *layer;
|
||||
gint layer_type = GIMP_RGB_IMAGE;
|
||||
float layer_offset_x = 0.0;
|
||||
float layer_offset_y = 0.0;
|
||||
|
@ -796,7 +796,7 @@ load_image (GFile *file,
|
|||
*image = gimp_image_new_with_precision (cols, rows, image_type,
|
||||
image_precision);
|
||||
|
||||
if (*image < 1)
|
||||
if (! *image)
|
||||
{
|
||||
TIFFClose (tif);
|
||||
g_message ("Could not create a new image: %s",
|
||||
|
@ -814,8 +814,7 @@ load_image (GFile *file,
|
|||
gimp_image_set_filename (*image, fname);
|
||||
g_free (fname);
|
||||
|
||||
images_list = g_list_prepend (images_list,
|
||||
GINT_TO_POINTER (*image));
|
||||
images_list = g_list_prepend (images_list, *image);
|
||||
}
|
||||
else if (pages.o_pages != pages.n_pages)
|
||||
{
|
||||
|
@ -1047,18 +1046,18 @@ load_image (GFile *file,
|
|||
/* can't create the palette format here, need to get it from
|
||||
* an existing layer
|
||||
*/
|
||||
base_format = gimp_drawable_get_format (layer);
|
||||
base_format = gimp_drawable_get_format (GIMP_DRAWABLE (layer));
|
||||
}
|
||||
else
|
||||
{
|
||||
base_format =
|
||||
babl_format_with_space (babl_format_get_encoding (base_format),
|
||||
gimp_drawable_get_format (layer));
|
||||
gimp_drawable_get_format (GIMP_DRAWABLE (layer)));
|
||||
}
|
||||
|
||||
channel[0].ID = layer;
|
||||
channel[0].buffer = gimp_drawable_get_buffer (layer);
|
||||
channel[0].format = base_format;
|
||||
channel[0].drawable = GIMP_DRAWABLE (layer);
|
||||
channel[0].buffer = gimp_drawable_get_buffer (GIMP_DRAWABLE (layer));
|
||||
channel[0].format = base_format;
|
||||
|
||||
if (extra > 0 && ! worst_case)
|
||||
{
|
||||
|
@ -1069,11 +1068,11 @@ load_image (GFile *file,
|
|||
|
||||
gimp_rgb_set (&color, 0.0, 0.0, 0.0);
|
||||
|
||||
channel[i].ID = gimp_channel_new (*image, _("TIFF Channel"),
|
||||
cols, rows,
|
||||
100.0, &color);
|
||||
gimp_image_insert_channel (*image, channel[i].ID, -1, 0);
|
||||
channel[i].buffer = gimp_drawable_get_buffer (channel[i].ID);
|
||||
channel[i].drawable = GIMP_DRAWABLE (gimp_channel_new (*image, _("TIFF Channel"),
|
||||
cols, rows,
|
||||
100.0, &color));
|
||||
gimp_image_insert_channel (*image, GIMP_CHANNEL (channel[i].drawable), NULL, 0);
|
||||
channel[i].buffer = gimp_drawable_get_buffer (channel[i].drawable);
|
||||
|
||||
/* Unlike color channels, we don't care about the source
|
||||
* TRC for extra channels. We just want to import them
|
||||
|
@ -1140,13 +1139,13 @@ load_image (GFile *file,
|
|||
}
|
||||
|
||||
if (flip_horizontal)
|
||||
gimp_item_transform_flip_simple (layer,
|
||||
gimp_item_transform_flip_simple (GIMP_ITEM (layer),
|
||||
GIMP_ORIENTATION_HORIZONTAL,
|
||||
TRUE /* auto_center */,
|
||||
-1.0 /* axis */);
|
||||
|
||||
if (flip_vertical)
|
||||
gimp_item_transform_flip_simple (layer,
|
||||
gimp_item_transform_flip_simple (GIMP_ITEM (layer),
|
||||
GIMP_ORIENTATION_VERTICAL,
|
||||
TRUE /* auto_center */,
|
||||
-1.0 /* axis */);
|
||||
|
@ -1184,7 +1183,7 @@ load_image (GFile *file,
|
|||
}
|
||||
}
|
||||
|
||||
gimp_image_insert_layer (*image, layer, -1, -1);
|
||||
gimp_image_insert_layer (*image, layer, NULL, -1);
|
||||
|
||||
if (pages.target == GIMP_PAGE_SELECTOR_TARGET_IMAGES)
|
||||
{
|
||||
|
@ -1201,14 +1200,14 @@ load_image (GFile *file,
|
|||
|
||||
if (list)
|
||||
{
|
||||
*image = GPOINTER_TO_INT (list->data);
|
||||
*image = list->data;
|
||||
|
||||
list = g_list_next (list);
|
||||
}
|
||||
|
||||
for (; list; list = g_list_next (list))
|
||||
{
|
||||
gimp_display_new (GPOINTER_TO_INT (list->data));
|
||||
gimp_display_new (list->data);
|
||||
}
|
||||
|
||||
g_list_free (images_list);
|
||||
|
@ -1308,12 +1307,12 @@ load_rgba (TIFF *tif,
|
|||
}
|
||||
|
||||
static void
|
||||
load_paths (TIFF *tif,
|
||||
gint image,
|
||||
gint width,
|
||||
gint height,
|
||||
gint offset_x,
|
||||
gint offset_y)
|
||||
load_paths (TIFF *tif,
|
||||
GimpImage *image,
|
||||
gint width,
|
||||
gint height,
|
||||
gint offset_x,
|
||||
gint offset_y)
|
||||
{
|
||||
gsize n_bytes;
|
||||
gchar *bytes;
|
||||
|
@ -1387,16 +1386,16 @@ load_paths (TIFF *tif,
|
|||
if (id >= 2000 && id <= 2998)
|
||||
{
|
||||
/* path information */
|
||||
guint16 type;
|
||||
gint rec = pos;
|
||||
gint32 vectors;
|
||||
gdouble *points = NULL;
|
||||
gint expected_points = 0;
|
||||
gint pointcount = 0;
|
||||
gboolean closed = FALSE;
|
||||
guint16 type;
|
||||
gint rec = pos;
|
||||
GimpVectors *vectors;
|
||||
gdouble *points = NULL;
|
||||
gint expected_points = 0;
|
||||
gint pointcount = 0;
|
||||
gboolean closed = FALSE;
|
||||
|
||||
vectors = gimp_vectors_new (image, name);
|
||||
gimp_image_insert_vectors (image, vectors, -1, path_index);
|
||||
gimp_image_insert_vectors (image, vectors, NULL, path_index);
|
||||
path_index++;
|
||||
|
||||
while (rec < pos + len)
|
||||
|
|
|
@ -36,7 +36,7 @@ typedef struct
|
|||
|
||||
GimpPDBStatusType load_image (GFile *file,
|
||||
GimpRunMode run_mode,
|
||||
gint32 *image,
|
||||
GimpImage **image,
|
||||
gboolean *resolution_loaded,
|
||||
gboolean *profile_loaded,
|
||||
GError **error);
|
||||
|
|
|
@ -63,7 +63,7 @@
|
|||
|
||||
|
||||
static gboolean save_paths (TIFF *tif,
|
||||
gint32 image,
|
||||
GimpImage *image,
|
||||
gdouble width,
|
||||
gdouble height,
|
||||
gint offset_x,
|
||||
|
@ -78,7 +78,7 @@ static void byte2bit (const guchar *byteline,
|
|||
gboolean invert);
|
||||
|
||||
static void save_thumbnail (TiffSaveVals *tsvals,
|
||||
gint32 image,
|
||||
GimpImage *image,
|
||||
TIFF *tif);
|
||||
|
||||
|
||||
|
@ -106,27 +106,29 @@ double_to_psd_fixed (gdouble value,
|
|||
}
|
||||
|
||||
static gboolean
|
||||
save_paths (TIFF *tif,
|
||||
gint32 image,
|
||||
gdouble width,
|
||||
gdouble height,
|
||||
gint offset_x,
|
||||
gint offset_y)
|
||||
save_paths (TIFF *tif,
|
||||
GimpImage *image,
|
||||
gdouble width,
|
||||
gdouble height,
|
||||
gint offset_x,
|
||||
gint offset_y)
|
||||
{
|
||||
gint id = 2000; /* Photoshop paths have IDs >= 2000 */
|
||||
gint num_vectors, *vectors, v;
|
||||
GList *vectors;
|
||||
GList *iter;
|
||||
gint v;
|
||||
gint num_strokes, *strokes, s;
|
||||
GString *ps_tag;
|
||||
|
||||
vectors = gimp_image_get_vectors (image, &num_vectors);
|
||||
vectors = gimp_image_get_vectors (image);
|
||||
|
||||
if (num_vectors <= 0)
|
||||
if (! vectors)
|
||||
return FALSE;
|
||||
|
||||
ps_tag = g_string_new ("");
|
||||
|
||||
/* Only up to 1000 paths supported */
|
||||
for (v = 0; v < MIN (num_vectors, 1000); v++)
|
||||
for (iter = vectors, v = 0; iter && v < 1000; iter = iter->next, v++)
|
||||
{
|
||||
GString *data;
|
||||
gchar *name, *nameend;
|
||||
|
@ -144,7 +146,7 @@ save_paths (TIFF *tif,
|
|||
* - use iso8859-1 if possible
|
||||
* - otherwise use UTF-8, prepended with \xef\xbb\xbf (Byte-Order-Mark)
|
||||
*/
|
||||
name = gimp_item_get_name (vectors[v]);
|
||||
name = gimp_item_get_name (iter->data);
|
||||
tmpname = g_convert (name, -1, "iso8859-1", "utf-8", NULL, &len, &err);
|
||||
|
||||
if (tmpname && err == NULL)
|
||||
|
@ -181,7 +183,7 @@ save_paths (TIFF *tif,
|
|||
pointrecord[1] = 6; /* fill rule record */
|
||||
g_string_append_len (data, pointrecord, 26);
|
||||
|
||||
strokes = gimp_vectors_get_strokes (vectors[v], &num_strokes);
|
||||
strokes = gimp_vectors_get_strokes (iter->data, &num_strokes);
|
||||
|
||||
for (s = 0; s < num_strokes; s++)
|
||||
{
|
||||
|
@ -191,7 +193,7 @@ save_paths (TIFF *tif,
|
|||
gboolean closed;
|
||||
gint p = 0;
|
||||
|
||||
type = gimp_vectors_stroke_get_points (vectors[v], strokes[s],
|
||||
type = gimp_vectors_stroke_get_points (iter->data, strokes[s],
|
||||
&num_points, &points, &closed);
|
||||
|
||||
if (type != GIMP_VECTORS_STROKE_TYPE_BEZIER ||
|
||||
|
@ -242,7 +244,7 @@ save_paths (TIFF *tif,
|
|||
TIFFSetField (tif, TIFFTAG_PHOTOSHOP, ps_tag->len, ps_tag->str);
|
||||
g_string_free (ps_tag, TRUE);
|
||||
|
||||
g_free (vectors);
|
||||
g_list_free (vectors);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -268,11 +270,11 @@ static gboolean
|
|||
save_layer (TIFF *tif,
|
||||
TiffSaveVals *tsvals,
|
||||
const Babl *space,
|
||||
gint32 image,
|
||||
gint32 layer,
|
||||
GimpImage *image,
|
||||
GimpLayer *layer,
|
||||
gint32 page,
|
||||
gint32 num_pages,
|
||||
gint32 orig_image, /* the export function might */
|
||||
GimpImage *orig_image, /* the export function might */
|
||||
/* have created a duplicate */
|
||||
gint *saved_bpp,
|
||||
gboolean out_linear,
|
||||
|
@ -318,7 +320,7 @@ save_layer (TIFF *tif,
|
|||
|
||||
compression = tsvals->compression;
|
||||
|
||||
layer_name = gimp_item_get_name (layer);
|
||||
layer_name = gimp_item_get_name (GIMP_ITEM (layer));
|
||||
|
||||
/* Disabled because this isn't in older releases of libtiff, and it
|
||||
* wasn't helping much anyway
|
||||
|
@ -332,8 +334,8 @@ save_layer (TIFF *tif,
|
|||
tile_height = gimp_tile_height ();
|
||||
rowsperstrip = tile_height;
|
||||
|
||||
drawable_type = gimp_drawable_type (layer);
|
||||
buffer = gimp_drawable_get_buffer (layer);
|
||||
drawable_type = gimp_drawable_type (GIMP_DRAWABLE (layer));
|
||||
buffer = gimp_drawable_get_buffer (GIMP_DRAWABLE (layer));
|
||||
|
||||
format = gegl_buffer_get_format (buffer);
|
||||
type = babl_format_get_type (format, 0);
|
||||
|
@ -582,7 +584,7 @@ save_layer (TIFF *tif,
|
|||
samplesperpixel = (drawable_type == GIMP_INDEXEDA_IMAGE) ? 2 : 1;
|
||||
bytesperrow = cols;
|
||||
alpha = (drawable_type == GIMP_INDEXEDA_IMAGE);
|
||||
format = gimp_drawable_get_format (layer);
|
||||
format = gimp_drawable_get_format (GIMP_DRAWABLE (layer));
|
||||
|
||||
g_free (cmap);
|
||||
break;
|
||||
|
@ -683,7 +685,7 @@ save_layer (TIFF *tif,
|
|||
TIFFSetField (tif, TIFFTAG_RESOLUTIONUNIT, save_unit);
|
||||
}
|
||||
|
||||
gimp_drawable_offsets (layer, &offset_x, &offset_y);
|
||||
gimp_drawable_offsets (GIMP_DRAWABLE (layer), &offset_x, &offset_y);
|
||||
|
||||
if (offset_x || offset_y)
|
||||
{
|
||||
|
@ -777,7 +779,7 @@ out:
|
|||
|
||||
static void
|
||||
save_thumbnail (TiffSaveVals *tsvals,
|
||||
gint32 image,
|
||||
GimpImage *image,
|
||||
TIFF *tif)
|
||||
{
|
||||
/* now switch IFD and write thumbnail
|
||||
|
@ -860,7 +862,7 @@ save_thumbnail (TiffSaveVals *tsvals,
|
|||
static void
|
||||
save_metadata (GFile *file,
|
||||
TiffSaveVals *tsvals,
|
||||
gint32 image,
|
||||
GimpImage *image,
|
||||
GimpMetadata *metadata,
|
||||
GimpMetadataSaveFlags metadata_flags,
|
||||
gint saved_bpp)
|
||||
|
@ -942,8 +944,8 @@ save_metadata (GFile *file,
|
|||
gboolean
|
||||
save_image (GFile *file,
|
||||
TiffSaveVals *tsvals,
|
||||
gint32 image,
|
||||
gint32 orig_image, /* the export function */
|
||||
GimpImage *image,
|
||||
GimpImage *orig_image, /* the export function */
|
||||
/* might have created */
|
||||
/* a duplicate */
|
||||
const gchar *image_comment,
|
||||
|
@ -958,9 +960,11 @@ save_image (GFile *file,
|
|||
gboolean out_linear = FALSE;
|
||||
gint number_of_sub_IFDs = 1;
|
||||
toff_t sub_IFDs_offsets[1] = { 0UL };
|
||||
gint32 num_layers, *layers, current_layer = 0;
|
||||
gint32 num_layers, current_layer = 0;
|
||||
GList *layers;
|
||||
|
||||
layers = gimp_image_get_layers (image, &num_layers);
|
||||
layers = gimp_image_get_layers (image);
|
||||
num_layers = g_list_length (layers);
|
||||
|
||||
gimp_progress_init_printf (_("Exporting '%s'"),
|
||||
gimp_file_get_utf8_name (file));
|
||||
|
@ -1055,7 +1059,7 @@ save_image (GFile *file,
|
|||
|
||||
/* write last layer as first page. */
|
||||
if (! save_layer (tif, tsvals, space, image,
|
||||
layers[num_layers - current_layer - 1],
|
||||
g_list_nth_data (layers, num_layers - current_layer - 1),
|
||||
current_layer, num_layers,
|
||||
orig_image, saved_bpp, out_linear, error))
|
||||
{
|
||||
|
@ -1096,7 +1100,7 @@ save_image (GFile *file,
|
|||
{
|
||||
gint tmp_saved_bpp;
|
||||
if (! save_layer (tif, tsvals, space, image,
|
||||
layers[num_layers - current_layer - 1],
|
||||
g_list_nth_data (layers, num_layers - current_layer - 1),
|
||||
current_layer, num_layers, orig_image,
|
||||
&tmp_saved_bpp, out_linear, error))
|
||||
{
|
||||
|
@ -1128,6 +1132,7 @@ save_image (GFile *file,
|
|||
status = TRUE;
|
||||
|
||||
out:
|
||||
g_list_free (layers);
|
||||
return status;
|
||||
}
|
||||
|
||||
|
|
|
@ -39,8 +39,8 @@ typedef struct
|
|||
|
||||
gboolean save_image (GFile *file,
|
||||
TiffSaveVals *tsvals,
|
||||
gint32 image,
|
||||
gint32 orig_image,
|
||||
GimpImage *image,
|
||||
GimpImage *orig_image,
|
||||
const gchar *image_comment,
|
||||
gint *saved_bpp,
|
||||
GimpMetadata *metadata,
|
||||
|
|
|
@ -81,23 +81,23 @@ GType tiff_get_type (void) G_GNUC_CONST;
|
|||
|
||||
static GList * tiff_query_procedures (GimpPlugIn *plug_in);
|
||||
static GimpProcedure * tiff_create_procedure (GimpPlugIn *plug_in,
|
||||
const gchar *name);
|
||||
const gchar *name);
|
||||
|
||||
static GimpValueArray * tiff_load (GimpProcedure *procedure,
|
||||
GimpRunMode run_mode,
|
||||
GFile *file,
|
||||
const GimpValueArray *args,
|
||||
gpointer run_data);
|
||||
GimpRunMode run_mode,
|
||||
GFile *file,
|
||||
const GimpValueArray *args,
|
||||
gpointer run_data);
|
||||
static GimpValueArray * tiff_save (GimpProcedure *procedure,
|
||||
GimpRunMode run_mode,
|
||||
gint32 image,
|
||||
gint32 drawable,
|
||||
GFile *file,
|
||||
const GimpValueArray *args,
|
||||
gpointer run_data);
|
||||
GimpRunMode run_mode,
|
||||
GimpImage *image,
|
||||
GimpDrawable *drawable,
|
||||
GFile *file,
|
||||
const GimpValueArray *args,
|
||||
gpointer run_data);
|
||||
|
||||
static gboolean image_is_monochrome (gint32 image);
|
||||
static gboolean image_is_multi_layer (gint32 image);
|
||||
static gboolean image_is_monochrome (GimpImage *image);
|
||||
static gboolean image_is_multi_layer (GimpImage *image);
|
||||
|
||||
|
||||
G_DEFINE_TYPE (Tiff, tiff, GIMP_TYPE_PLUG_IN)
|
||||
|
@ -233,7 +233,7 @@ tiff_load (GimpProcedure *procedure,
|
|||
{
|
||||
GimpValueArray *return_vals;
|
||||
GimpPDBStatusType status;
|
||||
gint32 image = 0;
|
||||
GimpImage *image = NULL;
|
||||
gboolean resolution_loaded = FALSE;
|
||||
gboolean profile_loaded = FALSE;
|
||||
GimpMetadata *metadata;
|
||||
|
@ -250,7 +250,7 @@ tiff_load (GimpProcedure *procedure,
|
|||
&profile_loaded,
|
||||
&error);
|
||||
|
||||
if (image < 1)
|
||||
if (!image)
|
||||
return gimp_procedure_new_return_values (procedure, status, error);
|
||||
|
||||
metadata = gimp_image_metadata_load_prepare (image,
|
||||
|
@ -286,8 +286,8 @@ tiff_load (GimpProcedure *procedure,
|
|||
static GimpValueArray *
|
||||
tiff_save (GimpProcedure *procedure,
|
||||
GimpRunMode run_mode,
|
||||
gint32 image,
|
||||
gint32 drawable,
|
||||
GimpImage *image,
|
||||
GimpDrawable *drawable,
|
||||
GFile *file,
|
||||
const GimpValueArray *args,
|
||||
gpointer run_data)
|
||||
|
@ -296,7 +296,7 @@ tiff_save (GimpProcedure *procedure,
|
|||
GimpMetadata *metadata;
|
||||
GimpMetadataSaveFlags metadata_flags;
|
||||
GimpParasite *parasite;
|
||||
gint32 orig_image = image;
|
||||
GimpImage *orig_image = image;
|
||||
GimpExportReturn export = GIMP_EXPORT_CANCEL;
|
||||
GError *error = NULL;
|
||||
|
||||
|
@ -458,13 +458,13 @@ tiff_save (GimpProcedure *procedure,
|
|||
}
|
||||
|
||||
static gboolean
|
||||
image_is_monochrome (gint32 image)
|
||||
image_is_monochrome (GimpImage *image)
|
||||
{
|
||||
guchar *colors;
|
||||
gint num_colors;
|
||||
gboolean monochrome = FALSE;
|
||||
|
||||
g_return_val_if_fail (image != -1, FALSE);
|
||||
g_return_val_if_fail (GIMP_IS_IMAGE (image), FALSE);
|
||||
|
||||
colors = gimp_image_get_colormap (image, &num_colors);
|
||||
|
||||
|
@ -489,13 +489,14 @@ image_is_monochrome (gint32 image)
|
|||
}
|
||||
|
||||
static gboolean
|
||||
image_is_multi_layer (gint32 image)
|
||||
image_is_multi_layer (GimpImage *image)
|
||||
{
|
||||
gint32 *layers;
|
||||
GList *layers;
|
||||
gint32 n_layers;
|
||||
|
||||
layers = gimp_image_get_layers (image, &n_layers);
|
||||
g_free (layers);
|
||||
layers = gimp_image_get_layers (image);
|
||||
n_layers = g_list_length (layers);
|
||||
g_list_free (layers);
|
||||
|
||||
return (n_layers > 1);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue