mirror of https://github.com/GNOME/gimp.git
app: add XCF support for >8bit, using file format version 4
This commit is contained in:
parent
1badcb7ce9
commit
67908df578
|
@ -142,6 +142,7 @@ xcf_load_image (Gimp *gimp,
|
||||||
gint width;
|
gint width;
|
||||||
gint height;
|
gint height;
|
||||||
gint image_type;
|
gint image_type;
|
||||||
|
gint precision = GIMP_PRECISION_U8;
|
||||||
gint num_successful_elements = 0;
|
gint num_successful_elements = 0;
|
||||||
|
|
||||||
/* read in the image width, height and type */
|
/* read in the image width, height and type */
|
||||||
|
@ -149,8 +150,10 @@ xcf_load_image (Gimp *gimp,
|
||||||
info->cp += xcf_read_int32 (info->fp, (guint32 *) &height, 1);
|
info->cp += xcf_read_int32 (info->fp, (guint32 *) &height, 1);
|
||||||
info->cp += xcf_read_int32 (info->fp, (guint32 *) &image_type, 1);
|
info->cp += xcf_read_int32 (info->fp, (guint32 *) &image_type, 1);
|
||||||
|
|
||||||
image = gimp_create_image (gimp, width, height, image_type,
|
if (info->file_version >= 4)
|
||||||
GIMP_PRECISION_U8,
|
info->cp += xcf_read_int32 (info->fp, (guint32 *) &precision, 1);
|
||||||
|
|
||||||
|
image = gimp_create_image (gimp, width, height, image_type, precision,
|
||||||
FALSE);
|
FALSE);
|
||||||
|
|
||||||
gimp_image_undo_disable (image);
|
gimp_image_undo_disable (image);
|
||||||
|
@ -1403,7 +1406,6 @@ xcf_load_level (XcfInfo *info,
|
||||||
gint i;
|
gint i;
|
||||||
gint fail;
|
gint fail;
|
||||||
|
|
||||||
/* XXX use an appropriate format here */
|
|
||||||
format = gegl_buffer_get_format (buffer);
|
format = gegl_buffer_get_format (buffer);
|
||||||
|
|
||||||
info->cp += xcf_read_int32 (info->fp, (guint32 *) &width, 1);
|
info->cp += xcf_read_int32 (info->fp, (guint32 *) &width, 1);
|
||||||
|
|
|
@ -214,6 +214,9 @@ xcf_save_choose_format (XcfInfo *info,
|
||||||
save_version = MAX (3, save_version);
|
save_version = MAX (3, save_version);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (gimp_image_get_precision (image) != GIMP_PRECISION_U8)
|
||||||
|
save_version = MAX (4, save_version);
|
||||||
|
|
||||||
info->file_version = save_version;
|
info->file_version = save_version;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,6 +261,12 @@ xcf_save_image (XcfInfo *info,
|
||||||
value = gimp_image_base_type (image);
|
value = gimp_image_base_type (image);
|
||||||
xcf_write_int32_check_error (info, &value, 1);
|
xcf_write_int32_check_error (info, &value, 1);
|
||||||
|
|
||||||
|
if (info->file_version >= 4)
|
||||||
|
{
|
||||||
|
value = gimp_image_get_precision (image);
|
||||||
|
xcf_write_int32_check_error (info, &value, 1);
|
||||||
|
}
|
||||||
|
|
||||||
/* determine the number of layers and channels in the image */
|
/* determine the number of layers and channels in the image */
|
||||||
all_layers = gimp_image_get_layer_list (image);
|
all_layers = gimp_image_get_layer_list (image);
|
||||||
all_channels = gimp_image_get_channel_list (image);
|
all_channels = gimp_image_get_channel_list (image);
|
||||||
|
@ -1317,7 +1326,6 @@ xcf_save_buffer (XcfInfo *info,
|
||||||
gint tmp1, tmp2;
|
gint tmp1, tmp2;
|
||||||
GError *tmp_error = NULL;
|
GError *tmp_error = NULL;
|
||||||
|
|
||||||
/* XXX use an appropriate format here */
|
|
||||||
format = gegl_buffer_get_format (buffer);
|
format = gegl_buffer_get_format (buffer);
|
||||||
|
|
||||||
width = gegl_buffer_get_width (buffer);
|
width = gegl_buffer_get_width (buffer);
|
||||||
|
|
|
@ -69,7 +69,8 @@ static GimpXcfLoaderFunc * const xcf_loaders[] =
|
||||||
xcf_load_image, /* version 0 */
|
xcf_load_image, /* version 0 */
|
||||||
xcf_load_image, /* version 1 */
|
xcf_load_image, /* version 1 */
|
||||||
xcf_load_image, /* version 2 */
|
xcf_load_image, /* version 2 */
|
||||||
xcf_load_image /* version 3 */
|
xcf_load_image, /* version 3 */
|
||||||
|
xcf_load_image /* version 4 */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue