/*! \brief Create a character string representation of a picture OBJECT. * \par Function Description * This function formats a string in the buffer <B>*buff</B> to describe * the picture object <B>*object</B>. * * \param [in] object Picture OBJECT to create string from. * \return A pointer to the picture OBJECT character string. * * \note * Caller must g_free returned character string. * */ char *o_picture_save(OBJECT *object) { int width, height, x1, y1; gchar *encoded_picture=NULL; gchar *out=NULL; guint encoded_picture_length; /* calculate the width and height of the box */ width = abs(object->picture->lower_x - object->picture->upper_x); height = abs(object->picture->upper_y - object->picture->lower_y); /* calculate the lower left corner of the box */ x1 = object->picture->upper_x; y1 = object->picture->upper_y - height; /* move the origin to 0, 0*/ #if DEBUG printf("picture: %d %d %d %d\n", x1, y1, width, height); #endif /* Encode the picture if it's embedded */ if (object->picture->embedded == 1) { encoded_picture = s_encoding_base64_encode( (char *)object->picture->file_content, object->picture->file_length, &encoded_picture_length, TRUE); if (encoded_picture == NULL) { s_log_message(_("ERROR: o_picture_save: unable to encode the picture.\n")); } } if (object->picture->embedded==1 && encoded_picture != NULL) { out = g_strdup_printf("%c %d %d %d %d %d %c %c\n%s\n%s\n%s", object->type, x1, y1, width, height, object->picture->angle, /* Convert the (0,1) chars to ASCII */ (object->picture->mirrored)+0x30, object->picture->embedded+0x30, object->picture->filename, encoded_picture, "."); } else { out = g_strdup_printf("%c %d %d %d %d %d %c %c\n%s", object->type, x1, y1, width, height, object->picture->angle, /* Convert the (0,1) chars to ASCII */ (object->picture->mirrored)+0x30, object->picture->embedded+0x30, object->picture->filename); } g_free(encoded_picture); return(out); }
/*! \brief Create a character string representation of a picture OBJECT. * \par Function Description * This function formats a string in the buffer <B>*buff</B> to describe * the picture object <B>*object</B>. * * \param [in] object Picture OBJECT to create string from. * \return A pointer to the picture OBJECT character string. * * \note * Caller must g_free returned character string. * */ gchar* geda_picture_object_to_buffer (const GedaObject *object) { int width, height, x1, y1; gchar *encoded_picture=NULL; gchar *out=NULL; guint encoded_picture_length; const gchar *filename = NULL; /* calculate the width and height of the box */ width = abs(object->picture->lower_x - object->picture->upper_x); height = abs(object->picture->upper_y - object->picture->lower_y); /* calculate the lower left corner of the box */ x1 = object->picture->upper_x; y1 = object->picture->upper_y - height; /* move the origin to 0, 0*/ #if DEBUG printf("picture: %d %d %d %d\n", x1, y1, width, height); #endif /* Encode the picture if it's embedded */ if (o_picture_is_embedded (object)) { encoded_picture = s_encoding_base64_encode( (char *)object->picture->file_content, object->picture->file_length, &encoded_picture_length, TRUE); if (encoded_picture == NULL) { s_log_message(_("ERROR: o_picture_save: unable to encode the picture.")); } } /* Cope with null filename */ filename = o_picture_get_filename (object); if (filename == NULL) filename = ""; if (o_picture_is_embedded (object) && encoded_picture != NULL) { out = g_strdup_printf("%c %d %d %d %d %d %c %c\n%s\n%s\n%s", object->type, x1, y1, width, height, object->picture->angle, /* Convert the (0,1) chars to ASCII */ (object->picture->mirrored)+0x30, '1', filename, encoded_picture, "."); } else { out = g_strdup_printf("%c %d %d %d %d %d %c %c\n%s", object->type, x1, y1, width, height, object->picture->angle, /* Convert the (0,1) chars to ASCII */ (object->picture->mirrored)+0x30, '0', filename); } g_free(encoded_picture); return(out); }