#include <gtk/gtk.h>
#include "gdk/gdkmemoryformatprivate.h"
static void
fill_with_random_data (guchar *data, gsize size)
{
for (gsize i = 0 ; i < size; i++)
data[i] = g_random_int_range (0 , 256 );
}
int
main (int argc, char *argv[])
{
int rounds = 10 ;
gtk_init ();
for (gsize i = 2 ; i < 500 ; i += 2 )
{
guchar *src_data;
guchar *dst_data;
GdkMemoryLayout src_layout;
GdkMemoryLayout dst_layout;
gsize width, height;
guint64 elapsed;
width = i;
height = i;
gdk_memory_layout_init (&src_layout, GDK_MEMORY_A8R8G8B8_PREMULTIPLIED, width, height, 1 );
src_data = g_malloc (src_layout.size);
fill_with_random_data (src_data, src_layout.size);
gdk_memory_layout_init (&dst_layout, GDK_MEMORY_R16G16B16A16, width, height, 1 );
dst_data = g_malloc (dst_layout.size);
elapsed = 0 ;
for (int k = 0 ; k < rounds; k++)
{
guint64 before = g_get_monotonic_time ();
gdk_memory_convert (dst_data,
&dst_layout,
gdk_color_state_get_srgb (),
src_data,
&src_layout,
gdk_color_state_get_srgb_linear ());
elapsed += g_get_monotonic_time () - before;
}
g_print ("%zu, %zu, %zu, %f\n" , width, height, width * height, ((double )(elapsed / rounds)) / 1000 .0 );
}
}
Messung V0.5 in Prozent C=97 H=90 G=93
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-07-03)
¤
*© Formatika GbR, Deutschland