void
histogram_imager_save_image_file (HistogramImager *self, const gchar *filename, GError **error)
{
    /* Save our current image to a .PNG file */
    gchar *params;

    histogram_imager_update_image (self);

    /* Save our current parameters in a tEXt chunk, using a format that
     * is both human-readable and easy to load parameters from automatically.
     */
    params = parameter_holder_save_string (PARAMETER_HOLDER(self));
    gdk_pixbuf_save (self->image, filename, "png", error, "tEXt::fyre_params", params, NULL);
    g_free (params);
}
예제 #2
0
static HistoryNode* history_node_new   (HistogramImager* map)
{
    HistoryNode* self = g_new0(HistoryNode, 1);
    gint width, height;

    g_get_current_time(&self->timestamp);
    self->params = parameter_holder_save_string(PARAMETER_HOLDER(map));

    /* Use the normal icon size plus a little extra */
    gtk_icon_size_lookup(GTK_ICON_SIZE_MENU, &width, &height);
    width *= 1.75;
    height *= 1.75;
    self->thumbnail = histogram_imager_make_thumbnail(map, width, height);

    return self;
}
예제 #3
0
파일: screensaver.c 프로젝트: ain101/Fyre
ScreenSaver* screensaver_new(IterativeMap *map, Animation *animation) {
    ScreenSaver *self = SCREENSAVER(g_object_new(screensaver_get_type(), NULL));
    int i;
    AnimationIter iter;
    gchar* common_parameters;

    self->animation = ANIMATION(g_object_ref(animation));
    self->map = ITERATIVE_MAP(g_object_ref(map));
    self->view = g_object_ref(histogram_view_new(HISTOGRAM_IMAGER(self->map)));

    /* Allocate and interpolate all frames */
    self->framerate = 10;
    self->num_frames = animation_get_length(self->animation) * self->framerate;
    self->frame_renders = g_new0(IterativeMap*, self->num_frames);
    self->frame_parameters = g_new0(ParameterHolderPair, self->num_frames);
    self->current_frame = 0;
    common_parameters = parameter_holder_save_string(PARAMETER_HOLDER(map));

    animation_iter_seek(animation, &iter, 0);
    for (i=0; i<self->num_frames; i++) {
	self->frame_renders[i] = ITERATIVE_MAP(de_jong_new());
	parameter_holder_load_string(PARAMETER_HOLDER(self->frame_renders[i]), common_parameters);

	self->frame_parameters[i].a = PARAMETER_HOLDER(de_jong_new());
	animation_iter_load(animation, &iter, self->frame_parameters[i].a);
	animation_iter_seek_relative(animation, &iter, 1/self->framerate);
    }
    for (i=0; i<self->num_frames-1; i++)
	self->frame_parameters[i].b = self->frame_parameters[i+1].a;
    self->frame_parameters[self->num_frames-1].b = self->frame_parameters[self->num_frames-1].a;

    g_free(common_parameters);
    self->direction = 1;

    screensaver_start(self);
    return self;
}