From ee7f2f97025ef4cea09cbf7e94b4b9f59821783f Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 7 Sep 2021 09:20:05 -0400 Subject: [PATCH] Add gdk_texture_save_to_tiff This is a companion to gdk_texture_save_to_png, using the tiff format, which will let us avoid lossy conversion of HDR data, since we can store floating point data. --- gdk/gdktexture.c | 36 ++++++++++++++++++++++++++++++++++++ gdk/gdktexture.h | 3 +++ 2 files changed, 39 insertions(+) diff --git a/gdk/gdktexture.c b/gdk/gdktexture.c index 0c9fdf5535..06987ff9e6 100644 --- a/gdk/gdktexture.c +++ b/gdk/gdktexture.c @@ -712,3 +712,39 @@ gdk_texture_save_to_png_bytes (GdkTexture *texture) return gdk_save_png (texture); } + +/** + * gdk_texture_save_to_tiff: + * @texture: a `GdkTexture` + * @filename: (type filename): the filename to store to + * + * Store the given @texture to the @filename as a TIFF file. + * + * GTK will attempt to store data without loss. + * Returns: %TRUE if saving succeeded, %FALSE on failure. + * + * Since: 4.6 + */ +gboolean +gdk_texture_save_to_tiff (GdkTexture *texture, + const char *filename) +{ + GBytes *bytes; + gboolean result; + + g_return_val_if_fail (GDK_IS_TEXTURE (texture), FALSE); + g_return_val_if_fail (filename != NULL, FALSE); + + bytes = gdk_save_tiff (texture); + + if (!bytes) + return FALSE; + + result = g_file_set_contents (filename, + g_bytes_get_data (bytes, NULL), + g_bytes_get_size (bytes), + NULL); + g_bytes_unref (bytes); + + return result; +} diff --git a/gdk/gdktexture.h b/gdk/gdktexture.h index 41b9f3d7e7..ef0276ac2f 100644 --- a/gdk/gdktexture.h +++ b/gdk/gdktexture.h @@ -71,6 +71,9 @@ gboolean gdk_texture_save_to_png (GdkTexture const char *filename); GDK_AVAILABLE_IN_4_6 GBytes * gdk_texture_save_to_png_bytes (GdkTexture *texture); +GDK_AVAILABLE_IN_4_6 +gboolean gdk_texture_save_to_tiff (GdkTexture *texture, + const char *filename); G_END_DECLS