app/gimpimage.h app/gimpimageP.h app/gimpimage.c app/gimage_cmds.c

Sat Nov 14 23:16:55 GMT 1998  Austin Donnelly  <austin@greenend.org.uk>

	* app/gimpimage.h
	* app/gimpimageP.h
	* app/gimpimage.c
	* app/gimage_cmds.c
	* app/file_new_dialog.c
	* app/info_window.c
	* libgimp/gimp.h
	* libgimp/gimpimage.c
	* plug-ins/newsprint/newsprint.c
	* plug-ins/tiff/tiff.c: gimp_image_{get,set}_resolution() calls
	now get and set both X and Y resolutions.  Gimp image struct now
	has two resolution fields, one for each direction.  I've updated
	the two plugins which used the info (TIFF and newsprint).
This commit is contained in:
GMT 1998 Austin Donnelly 1998-11-14 23:28:47 +00:00 committed by Austin Donnelly
parent b8b5d7834d
commit 9dd1c38b7f
32 changed files with 319 additions and 143 deletions

View file

@ -1,3 +1,19 @@
Sat Nov 14 23:16:55 GMT 1998 Austin Donnelly <austin@greenend.org.uk>
* app/gimpimage.h
* app/gimpimageP.h
* app/gimpimage.c
* app/gimage_cmds.c
* app/file_new_dialog.c
* app/info_window.c
* libgimp/gimp.h
* libgimp/gimpimage.c
* plug-ins/newsprint/newsprint.c
* plug-ins/tiff/tiff.c: gimp_image_{get,set}_resolution() calls
now get and set both X and Y resolutions. Gimp image struct now
has two resolution fields, one for each direction. I've updated
the two plugins which used the info (TIFF and newsprint).
Sat Nov 14 20:15:46 CET 1998 Marc Lehmann <pcg@goof.com>
* plug-ins/script-fu/scripts/*: removed the image

View file

@ -155,7 +155,8 @@ static void gimp_image_init (GimpImage *gimage)
gimage->comp_preview = NULL;
gimage->parasites = parasite_list_new();
gimp_matrix_identity(gimage->transform);
gimage->resolution = 72.0; /* maybe should be rc-supplied default? */
gimage->xresolution = 72.0; /* maybe should be rc-supplied default? */
gimage->yresolution = 72.0;
gimage->save_proc= NULL;
}
@ -301,15 +302,22 @@ gimp_image_set_filename (GimpImage *gimage, char *filename)
void
gimp_image_set_resolution (GimpImage *gimage, float resolution)
gimp_image_set_resolution (GimpImage *gimage,
float xresolution,
float yresolution)
{
gimage->resolution = resolution;
gimage->xresolution = xresolution;
gimage->yresolution = yresolution;
}
float
gimp_image_get_resolution (GimpImage *gimage)
void
gimp_image_get_resolution (GimpImage *gimage,
float *xresolution,
float *yresolution)
{
return gimage->resolution;
g_return_if_fail(xresolution && yresolution);
*xresolution = gimage->xresolution;
*yresolution = gimage->yresolution;
}
void

View file

@ -104,8 +104,10 @@ GtkType gimp_image_get_type(void);
GimpImage * gimp_image_new (int, int, int);
void gimp_image_set_filename (GimpImage *, char *);
void gimp_image_set_resolution (GimpImage *, float);
float gimp_image_get_resolution (GimpImage *);
void gimp_image_set_resolution (GimpImage *, float, float);
void gimp_image_get_resolution (GimpImage *,
float *,
float *);
void gimp_image_set_save_proc (GimpImage *, PlugInProcDef *);
PlugInProcDef * gimp_image_get_save_proc (GimpImage *);
void gimp_image_resize (GimpImage *, int, int, int, int);

View file

@ -155,7 +155,8 @@ static void gimp_image_init (GimpImage *gimage)
gimage->comp_preview = NULL;
gimage->parasites = parasite_list_new();
gimp_matrix_identity(gimage->transform);
gimage->resolution = 72.0; /* maybe should be rc-supplied default? */
gimage->xresolution = 72.0; /* maybe should be rc-supplied default? */
gimage->yresolution = 72.0;
gimage->save_proc= NULL;
}
@ -301,15 +302,22 @@ gimp_image_set_filename (GimpImage *gimage, char *filename)
void
gimp_image_set_resolution (GimpImage *gimage, float resolution)
gimp_image_set_resolution (GimpImage *gimage,
float xresolution,
float yresolution)
{
gimage->resolution = resolution;
gimage->xresolution = xresolution;
gimage->yresolution = yresolution;
}
float
gimp_image_get_resolution (GimpImage *gimage)
void
gimp_image_get_resolution (GimpImage *gimage,
float *xresolution,
float *yresolution)
{
return gimage->resolution;
g_return_if_fail(xresolution && yresolution);
*xresolution = gimage->xresolution;
*yresolution = gimage->yresolution;
}
void

View file

@ -104,8 +104,10 @@ GtkType gimp_image_get_type(void);
GimpImage * gimp_image_new (int, int, int);
void gimp_image_set_filename (GimpImage *, char *);
void gimp_image_set_resolution (GimpImage *, float);
float gimp_image_get_resolution (GimpImage *);
void gimp_image_set_resolution (GimpImage *, float, float);
void gimp_image_get_resolution (GimpImage *,
float *,
float *);
void gimp_image_set_save_proc (GimpImage *, PlugInProcDef *);
PlugInProcDef * gimp_image_get_save_proc (GimpImage *);
void gimp_image_resize (GimpImage *, int, int, int, int);

View file

@ -155,7 +155,8 @@ static void gimp_image_init (GimpImage *gimage)
gimage->comp_preview = NULL;
gimage->parasites = parasite_list_new();
gimp_matrix_identity(gimage->transform);
gimage->resolution = 72.0; /* maybe should be rc-supplied default? */
gimage->xresolution = 72.0; /* maybe should be rc-supplied default? */
gimage->yresolution = 72.0;
gimage->save_proc= NULL;
}
@ -301,15 +302,22 @@ gimp_image_set_filename (GimpImage *gimage, char *filename)
void
gimp_image_set_resolution (GimpImage *gimage, float resolution)
gimp_image_set_resolution (GimpImage *gimage,
float xresolution,
float yresolution)
{
gimage->resolution = resolution;
gimage->xresolution = xresolution;
gimage->yresolution = yresolution;
}
float
gimp_image_get_resolution (GimpImage *gimage)
void
gimp_image_get_resolution (GimpImage *gimage,
float *xresolution,
float *yresolution)
{
return gimage->resolution;
g_return_if_fail(xresolution && yresolution);
*xresolution = gimage->xresolution;
*yresolution = gimage->yresolution;
}
void

View file

@ -104,8 +104,10 @@ GtkType gimp_image_get_type(void);
GimpImage * gimp_image_new (int, int, int);
void gimp_image_set_filename (GimpImage *, char *);
void gimp_image_set_resolution (GimpImage *, float);
float gimp_image_get_resolution (GimpImage *);
void gimp_image_set_resolution (GimpImage *, float, float);
void gimp_image_get_resolution (GimpImage *,
float *,
float *);
void gimp_image_set_save_proc (GimpImage *, PlugInProcDef *);
PlugInProcDef * gimp_image_get_save_proc (GimpImage *);
void gimp_image_resize (GimpImage *, int, int, int, int);

View file

@ -155,7 +155,8 @@ static void gimp_image_init (GimpImage *gimage)
gimage->comp_preview = NULL;
gimage->parasites = parasite_list_new();
gimp_matrix_identity(gimage->transform);
gimage->resolution = 72.0; /* maybe should be rc-supplied default? */
gimage->xresolution = 72.0; /* maybe should be rc-supplied default? */
gimage->yresolution = 72.0;
gimage->save_proc= NULL;
}
@ -301,15 +302,22 @@ gimp_image_set_filename (GimpImage *gimage, char *filename)
void
gimp_image_set_resolution (GimpImage *gimage, float resolution)
gimp_image_set_resolution (GimpImage *gimage,
float xresolution,
float yresolution)
{
gimage->resolution = resolution;
gimage->xresolution = xresolution;
gimage->yresolution = yresolution;
}
float
gimp_image_get_resolution (GimpImage *gimage)
void
gimp_image_get_resolution (GimpImage *gimage,
float *xresolution,
float *yresolution)
{
return gimage->resolution;
g_return_if_fail(xresolution && yresolution);
*xresolution = gimage->xresolution;
*yresolution = gimage->yresolution;
}
void

View file

@ -104,8 +104,10 @@ GtkType gimp_image_get_type(void);
GimpImage * gimp_image_new (int, int, int);
void gimp_image_set_filename (GimpImage *, char *);
void gimp_image_set_resolution (GimpImage *, float);
float gimp_image_get_resolution (GimpImage *);
void gimp_image_set_resolution (GimpImage *, float, float);
void gimp_image_get_resolution (GimpImage *,
float *,
float *);
void gimp_image_set_save_proc (GimpImage *, PlugInProcDef *);
PlugInProcDef * gimp_image_get_save_proc (GimpImage *);
void gimp_image_resize (GimpImage *, int, int, int, int);

View file

@ -155,7 +155,8 @@ static void gimp_image_init (GimpImage *gimage)
gimage->comp_preview = NULL;
gimage->parasites = parasite_list_new();
gimp_matrix_identity(gimage->transform);
gimage->resolution = 72.0; /* maybe should be rc-supplied default? */
gimage->xresolution = 72.0; /* maybe should be rc-supplied default? */
gimage->yresolution = 72.0;
gimage->save_proc= NULL;
}
@ -301,15 +302,22 @@ gimp_image_set_filename (GimpImage *gimage, char *filename)
void
gimp_image_set_resolution (GimpImage *gimage, float resolution)
gimp_image_set_resolution (GimpImage *gimage,
float xresolution,
float yresolution)
{
gimage->resolution = resolution;
gimage->xresolution = xresolution;
gimage->yresolution = yresolution;
}
float
gimp_image_get_resolution (GimpImage *gimage)
void
gimp_image_get_resolution (GimpImage *gimage,
float *xresolution,
float *yresolution)
{
return gimage->resolution;
g_return_if_fail(xresolution && yresolution);
*xresolution = gimage->xresolution;
*yresolution = gimage->yresolution;
}
void

View file

@ -104,8 +104,10 @@ GtkType gimp_image_get_type(void);
GimpImage * gimp_image_new (int, int, int);
void gimp_image_set_filename (GimpImage *, char *);
void gimp_image_set_resolution (GimpImage *, float);
float gimp_image_get_resolution (GimpImage *);
void gimp_image_set_resolution (GimpImage *, float, float);
void gimp_image_get_resolution (GimpImage *,
float *,
float *);
void gimp_image_set_save_proc (GimpImage *, PlugInProcDef *);
PlugInProcDef * gimp_image_get_save_proc (GimpImage *);
void gimp_image_resize (GimpImage *, int, int, int, int);

View file

@ -155,7 +155,8 @@ static void gimp_image_init (GimpImage *gimage)
gimage->comp_preview = NULL;
gimage->parasites = parasite_list_new();
gimp_matrix_identity(gimage->transform);
gimage->resolution = 72.0; /* maybe should be rc-supplied default? */
gimage->xresolution = 72.0; /* maybe should be rc-supplied default? */
gimage->yresolution = 72.0;
gimage->save_proc= NULL;
}
@ -301,15 +302,22 @@ gimp_image_set_filename (GimpImage *gimage, char *filename)
void
gimp_image_set_resolution (GimpImage *gimage, float resolution)
gimp_image_set_resolution (GimpImage *gimage,
float xresolution,
float yresolution)
{
gimage->resolution = resolution;
gimage->xresolution = xresolution;
gimage->yresolution = yresolution;
}
float
gimp_image_get_resolution (GimpImage *gimage)
void
gimp_image_get_resolution (GimpImage *gimage,
float *xresolution,
float *yresolution)
{
return gimage->resolution;
g_return_if_fail(xresolution && yresolution);
*xresolution = gimage->xresolution;
*yresolution = gimage->yresolution;
}
void

View file

@ -104,8 +104,10 @@ GtkType gimp_image_get_type(void);
GimpImage * gimp_image_new (int, int, int);
void gimp_image_set_filename (GimpImage *, char *);
void gimp_image_set_resolution (GimpImage *, float);
float gimp_image_get_resolution (GimpImage *);
void gimp_image_set_resolution (GimpImage *, float, float);
void gimp_image_get_resolution (GimpImage *,
float *,
float *);
void gimp_image_set_save_proc (GimpImage *, PlugInProcDef *);
PlugInProcDef * gimp_image_get_save_proc (GimpImage *);
void gimp_image_resize (GimpImage *, int, int, int, int);

View file

@ -155,7 +155,8 @@ static void gimp_image_init (GimpImage *gimage)
gimage->comp_preview = NULL;
gimage->parasites = parasite_list_new();
gimp_matrix_identity(gimage->transform);
gimage->resolution = 72.0; /* maybe should be rc-supplied default? */
gimage->xresolution = 72.0; /* maybe should be rc-supplied default? */
gimage->yresolution = 72.0;
gimage->save_proc= NULL;
}
@ -301,15 +302,22 @@ gimp_image_set_filename (GimpImage *gimage, char *filename)
void
gimp_image_set_resolution (GimpImage *gimage, float resolution)
gimp_image_set_resolution (GimpImage *gimage,
float xresolution,
float yresolution)
{
gimage->resolution = resolution;
gimage->xresolution = xresolution;
gimage->yresolution = yresolution;
}
float
gimp_image_get_resolution (GimpImage *gimage)
void
gimp_image_get_resolution (GimpImage *gimage,
float *xresolution,
float *yresolution)
{
return gimage->resolution;
g_return_if_fail(xresolution && yresolution);
*xresolution = gimage->xresolution;
*yresolution = gimage->yresolution;
}
void

View file

@ -104,8 +104,10 @@ GtkType gimp_image_get_type(void);
GimpImage * gimp_image_new (int, int, int);
void gimp_image_set_filename (GimpImage *, char *);
void gimp_image_set_resolution (GimpImage *, float);
float gimp_image_get_resolution (GimpImage *);
void gimp_image_set_resolution (GimpImage *, float, float);
void gimp_image_get_resolution (GimpImage *,
float *,
float *);
void gimp_image_set_save_proc (GimpImage *, PlugInProcDef *);
PlugInProcDef * gimp_image_get_save_proc (GimpImage *);
void gimp_image_resize (GimpImage *, int, int, int, int);

View file

@ -118,7 +118,10 @@ file_new_ok_callback (GtkWidget *widget,
gimage = gimage_new (vals->width, vals->height, vals->type);
gimp_image_set_resolution(gimage, vals->resolution);
/* XXX for the moment, we set both x and y resolution to the same,
* since we don't have the UI to get both values from the user, and
* besides, that's what PhotoShop seems to do. */
gimp_image_set_resolution(gimage, vals->resolution, vals->resolution);
/* Make the background (or first) layer */
layer = layer_new (gimage, gimage->width, gimage->height,
@ -448,7 +451,7 @@ file_new_cmd_callback (GtkWidget *widget,
vals->width = gdisp->gimage->width;
vals->height = gdisp->gimage->height;
vals->type = gimage_base_type (gdisp->gimage);
vals->resolution = gdisp->gimage->resolution;
vals->resolution = gdisp->gimage->xresolution;
vals->unit = last_unit;
vals->res_unit = 1.0;
}

View file

@ -199,7 +199,9 @@ info_window_update (InfoDialog *info_win,
(int) gdisp->gimage->width, (int) gdisp->gimage->height);
/* image resolution */
sprintf (iwd->resolution_str, "%g dpi", gdisp->gimage->resolution);
sprintf (iwd->resolution_str, "%g x %g dpi",
gdisp->gimage->xresolution,
gdisp->gimage->yresolution);
/* zoom ratio */
sprintf (iwd->scale_str, "%d:%d",

View file

@ -118,7 +118,10 @@ file_new_ok_callback (GtkWidget *widget,
gimage = gimage_new (vals->width, vals->height, vals->type);
gimp_image_set_resolution(gimage, vals->resolution);
/* XXX for the moment, we set both x and y resolution to the same,
* since we don't have the UI to get both values from the user, and
* besides, that's what PhotoShop seems to do. */
gimp_image_set_resolution(gimage, vals->resolution, vals->resolution);
/* Make the background (or first) layer */
layer = layer_new (gimage, gimage->width, gimage->height,
@ -448,7 +451,7 @@ file_new_cmd_callback (GtkWidget *widget,
vals->width = gdisp->gimage->width;
vals->height = gdisp->gimage->height;
vals->type = gimage_base_type (gdisp->gimage);
vals->resolution = gdisp->gimage->resolution;
vals->resolution = gdisp->gimage->xresolution;
vals->unit = last_unit;
vals->res_unit = 1.0;
}

View file

@ -2783,25 +2783,32 @@ static Argument *
gimage_get_resolution_invoker (Argument *args)
{
GImage *gimage;
float resolution;
float xresolution;
float yresolution;
Argument *return_args;
resolution = 0;
xresolution = 0.0;
yresolution = 0.0;
success = TRUE;
if (success)
{
int_value = args[0].value.pdb_int;
if ((gimage = gimage_get_ID (int_value)))
resolution = gimage->resolution;
else
if ((gimage = gimage_get_ID (int_value))) {
xresolution = gimage->xresolution;
yresolution = gimage->yresolution;
} else {
success = FALSE;
}
}
return_args= procedural_db_return_args(&gimage_get_resolution_proc, success);
if (success)
return_args[1].value.pdb_float = resolution;
{
return_args[1].value.pdb_float = xresolution;
return_args[2].value.pdb_float = yresolution;
}
return return_args;
}
@ -2818,8 +2825,12 @@ ProcArg gimage_get_resolution_args[] =
ProcArg gimage_get_resolution_out_args[] =
{
{ PDB_FLOAT,
"resolution",
"the image's resolution, in dots per inch"
"xresolution",
"the image's resolution in the x-axis, in dots per inch"
},
{ PDB_FLOAT,
"yresolution",
"the image's resolution in the y-axis, in dots per inch"
}
};
@ -2838,7 +2849,7 @@ ProcRecord gimage_get_resolution_proc =
gimage_get_resolution_args,
/* Output arguments */
1,
2,
gimage_get_resolution_out_args,
/* Exec method */
@ -2866,7 +2877,9 @@ gimage_set_resolution_invoker (Argument *args)
if (success)
{
float_value = args[1].value.pdb_float;
gimage->resolution = float_value;
gimage->xresolution = float_value;
float_value = args[2].value.pdb_float;
gimage->yresolution = float_value;
}
return_args= procedural_db_return_args(&gimage_set_resolution_proc, success);
@ -2882,8 +2895,12 @@ ProcArg gimage_set_resolution_args[] =
"the image"
},
{ PDB_FLOAT,
"resolution",
"resolution in dots per inch"
"xresolution",
"resolution in x-axis, in dots per inch"
},
{ PDB_FLOAT,
"yresolution",
"resolution in y-axis, in dots per inch"
}
};
@ -2898,7 +2915,7 @@ ProcRecord gimage_set_resolution_proc =
PDB_INTERNAL,
/* Input arguments */
2,
3,
gimage_set_resolution_args,
/* Output arguments */

View file

@ -155,7 +155,8 @@ static void gimp_image_init (GimpImage *gimage)
gimage->comp_preview = NULL;
gimage->parasites = parasite_list_new();
gimp_matrix_identity(gimage->transform);
gimage->resolution = 72.0; /* maybe should be rc-supplied default? */
gimage->xresolution = 72.0; /* maybe should be rc-supplied default? */
gimage->yresolution = 72.0;
gimage->save_proc= NULL;
}
@ -301,15 +302,22 @@ gimp_image_set_filename (GimpImage *gimage, char *filename)
void
gimp_image_set_resolution (GimpImage *gimage, float resolution)
gimp_image_set_resolution (GimpImage *gimage,
float xresolution,
float yresolution)
{
gimage->resolution = resolution;
gimage->xresolution = xresolution;
gimage->yresolution = yresolution;
}
float
gimp_image_get_resolution (GimpImage *gimage)
void
gimp_image_get_resolution (GimpImage *gimage,
float *xresolution,
float *yresolution)
{
return gimage->resolution;
g_return_if_fail(xresolution && yresolution);
*xresolution = gimage->xresolution;
*yresolution = gimage->yresolution;
}
void

View file

@ -104,8 +104,10 @@ GtkType gimp_image_get_type(void);
GimpImage * gimp_image_new (int, int, int);
void gimp_image_set_filename (GimpImage *, char *);
void gimp_image_set_resolution (GimpImage *, float);
float gimp_image_get_resolution (GimpImage *);
void gimp_image_set_resolution (GimpImage *, float, float);
void gimp_image_get_resolution (GimpImage *,
float *,
float *);
void gimp_image_set_save_proc (GimpImage *, PlugInProcDef *);
PlugInProcDef * gimp_image_get_save_proc (GimpImage *);
void gimp_image_resize (GimpImage *, int, int, int, int);

View file

@ -22,7 +22,8 @@ struct _GimpImage
PlugInProcDef *save_proc; /* last PDB save proc used */
int width, height; /* width and height attributes */
float resolution; /* image res, in dpi */
float xresolution; /* image x-res, in dpi */
float yresolution; /* image y-res, in dpi */
int base_type; /* base gimp_image type */
unsigned char * cmap; /* colormap--for indexed */

View file

@ -118,7 +118,10 @@ file_new_ok_callback (GtkWidget *widget,
gimage = gimage_new (vals->width, vals->height, vals->type);
gimp_image_set_resolution(gimage, vals->resolution);
/* XXX for the moment, we set both x and y resolution to the same,
* since we don't have the UI to get both values from the user, and
* besides, that's what PhotoShop seems to do. */
gimp_image_set_resolution(gimage, vals->resolution, vals->resolution);
/* Make the background (or first) layer */
layer = layer_new (gimage, gimage->width, gimage->height,
@ -448,7 +451,7 @@ file_new_cmd_callback (GtkWidget *widget,
vals->width = gdisp->gimage->width;
vals->height = gdisp->gimage->height;
vals->type = gimage_base_type (gdisp->gimage);
vals->resolution = gdisp->gimage->resolution;
vals->resolution = gdisp->gimage->xresolution;
vals->unit = last_unit;
vals->res_unit = 1.0;
}

View file

@ -199,7 +199,9 @@ info_window_update (InfoDialog *info_win,
(int) gdisp->gimage->width, (int) gdisp->gimage->height);
/* image resolution */
sprintf (iwd->resolution_str, "%g dpi", gdisp->gimage->resolution);
sprintf (iwd->resolution_str, "%g x %g dpi",
gdisp->gimage->xresolution,
gdisp->gimage->yresolution);
/* zoom ratio */
sprintf (iwd->scale_str, "%d:%d",

View file

@ -199,7 +199,9 @@ info_window_update (InfoDialog *info_win,
(int) gdisp->gimage->width, (int) gdisp->gimage->height);
/* image resolution */
sprintf (iwd->resolution_str, "%g dpi", gdisp->gimage->resolution);
sprintf (iwd->resolution_str, "%g x %g dpi",
gdisp->gimage->xresolution,
gdisp->gimage->yresolution);
/* zoom ratio */
sprintf (iwd->scale_str, "%d:%d",

View file

@ -445,8 +445,11 @@ void gimp_image_attach_new_parasite (gint32 image_ID,
void gimp_image_detach_parasite (gint32 image_ID,
const char *name);
void gimp_image_set_resolution (gint32 image_ID,
float resolution);
float gimp_image_get_resolution (gint32 image_ID);
float xresolution,
float yresolution);
void gimp_image_get_resolution (gint32 image_ID,
float *xresolution,
float *yresolution);
gint32 gimp_image_get_layer_by_tattoo (gint32 image_ID,
gint32 tattoo);
gint32 gimp_image_get_channel_by_tattoo (gint32 image_ID,

View file

@ -982,30 +982,43 @@ gimp_image_detach_parasite (gint32 image_ID, const char *name)
gimp_destroy_params (return_vals, nreturn_vals);
}
float
gimp_image_get_resolution (gint32 image_ID)
void
gimp_image_get_resolution (gint32 image_ID,
float *xresolution,
float *yresolution)
{
GParam *return_vals;
int nreturn_vals;
float result;
float xres;
float yres;
g_return_if_fail(xresolution && yresolution);
return_vals = gimp_run_procedure ("gimp_image_get_resolution",
&nreturn_vals,
PARAM_IMAGE, image_ID,
PARAM_END);
result = 0.0; /* error return value */
/* error return values */
xres = 0.0;
yres = 0.0;
if (return_vals[0].data.d_status == STATUS_SUCCESS)
result = return_vals[1].data.d_float;
{
xres = return_vals[1].data.d_float;
yres = return_vals[2].data.d_float;
}
gimp_destroy_params (return_vals, nreturn_vals);
return result;
*xresolution = xres;
*yresolution = yres;
}
void
gimp_image_set_resolution (gint32 image_ID,
float resolution)
float xresolution,
float yresolution)
{
GParam *return_vals;
int nreturn_vals;
@ -1013,7 +1026,8 @@ gimp_image_set_resolution (gint32 image_ID,
return_vals = gimp_run_procedure ("gimp_image_set_resolution",
&nreturn_vals,
PARAM_IMAGE, image_ID,
PARAM_FLOAT, resolution,
PARAM_FLOAT, xresolution,
PARAM_FLOAT, yresolution,
PARAM_END);
gimp_destroy_params (return_vals, nreturn_vals);

View file

@ -982,30 +982,43 @@ gimp_image_detach_parasite (gint32 image_ID, const char *name)
gimp_destroy_params (return_vals, nreturn_vals);
}
float
gimp_image_get_resolution (gint32 image_ID)
void
gimp_image_get_resolution (gint32 image_ID,
float *xresolution,
float *yresolution)
{
GParam *return_vals;
int nreturn_vals;
float result;
float xres;
float yres;
g_return_if_fail(xresolution && yresolution);
return_vals = gimp_run_procedure ("gimp_image_get_resolution",
&nreturn_vals,
PARAM_IMAGE, image_ID,
PARAM_END);
result = 0.0; /* error return value */
/* error return values */
xres = 0.0;
yres = 0.0;
if (return_vals[0].data.d_status == STATUS_SUCCESS)
result = return_vals[1].data.d_float;
{
xres = return_vals[1].data.d_float;
yres = return_vals[2].data.d_float;
}
gimp_destroy_params (return_vals, nreturn_vals);
return result;
*xresolution = xres;
*yresolution = yres;
}
void
gimp_image_set_resolution (gint32 image_ID,
float resolution)
float xresolution,
float yresolution)
{
GParam *return_vals;
int nreturn_vals;
@ -1013,7 +1026,8 @@ gimp_image_set_resolution (gint32 image_ID,
return_vals = gimp_run_procedure ("gimp_image_set_resolution",
&nreturn_vals,
PARAM_IMAGE, image_ID,
PARAM_FLOAT, resolution,
PARAM_FLOAT, xresolution,
PARAM_FLOAT, yresolution,
PARAM_END);
gimp_destroy_params (return_vals, nreturn_vals);

View file

@ -1265,8 +1265,15 @@ newsprint_dialog (GDrawable *drawable)
gtk_container_add (GTK_CONTAINER (frame), table);
#ifdef GIMP_HAVE_RESOLUTION_INFO
pvals_ui.input_spi =
gimp_image_get_resolution(gimp_drawable_image_id(drawable->id));
{
float xres, yres;
gimp_image_get_resolution(gimp_drawable_image_id(drawable->id),
&xres, &yres);
/* XXX hack: should really note both resolutions, and use
* rectangular cells, not square cells. But I'm being lazy,
* and the majority of the world works with xres == yres */
pvals_ui.input_spi = xres;
}
#endif
st.input_spi = NULL;

View file

@ -466,18 +466,11 @@ static gint32 load_image (char *filename) {
/* any resolution info in the file? */
#ifdef GIMP_HAVE_RESOLUTION_INFO
{
float xres=0, yres=0;
float xres=0.0, yres=0.0;
unsigned short units;
float res=0.0;
if (TIFFGetField (tif, TIFFTAG_XRESOLUTION, &xres)) {
if (TIFFGetField (tif, TIFFTAG_YRESOLUTION, &yres)) {
if (abs(xres - yres) > 1e-5)
g_message("TIFF warning: x resolution differs "
"from y resolution (%g != %g)\n"
"Using x resolution\n", xres, yres);
res = xres;
if (TIFFGetField (tif, TIFFTAG_RESOLUTIONUNIT, &units)) {
switch(units) {
@ -485,14 +478,16 @@ static gint32 load_image (char *filename) {
/* ImageMagick writes files with this silly resunit */
g_message("TIFF warning: resolution units meaningless, "
"forcing 72 dpi\n");
res = 72.0;
xres = 72.0;
yres = 72.0;
break;
case RESUNIT_INCH:
break;
case RESUNIT_CENTIMETER:
res = ((float)xres) * 2.54;
xres *= 2.54;
yres *= 2.54;
break;
default:
@ -506,16 +501,18 @@ static gint32 load_image (char *filename) {
}
} else { /* xres but no yres */
g_message("TIFF warning: no y resolution info, assuming same as x\n");
yres = xres;
}
/* sanity check, since division by zero later could be embarrassing */
if (res < 1e-5) {
if (xres < 1e-5 || yres < 1e-5) {
g_message("TIFF: image resolution is zero: forcing 72 dpi\n");
res = 72.0;
xres = 72.0;
yres = 72.0;
}
/* now set the new image's resolution info */
gimp_image_set_resolution (image, res);
gimp_image_set_resolution (image, xres, yres);
}
/* no x res tag => we assume we have no resolution info, so we
@ -1133,11 +1130,15 @@ static gint save_image (char *filename, gint32 image, gint32 layer) {
#ifdef GIMP_HAVE_RESOLUTION_INFO
/* resolution fields */
{
float resolution = gimp_image_get_resolution(image);
if (resolution)
float xresolution;
float yresolution;
gimp_image_get_resolution (image, &xresolution, &yresolution);
if (xresolution > 1e-5 && yresolution > 1e-5)
{
TIFFSetField (tif, TIFFTAG_XRESOLUTION, resolution);
TIFFSetField (tif, TIFFTAG_YRESOLUTION, resolution);
TIFFSetField (tif, TIFFTAG_XRESOLUTION, xresolution);
TIFFSetField (tif, TIFFTAG_YRESOLUTION, yresolution);
TIFFSetField (tif, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);
}
}

View file

@ -1265,8 +1265,15 @@ newsprint_dialog (GDrawable *drawable)
gtk_container_add (GTK_CONTAINER (frame), table);
#ifdef GIMP_HAVE_RESOLUTION_INFO
pvals_ui.input_spi =
gimp_image_get_resolution(gimp_drawable_image_id(drawable->id));
{
float xres, yres;
gimp_image_get_resolution(gimp_drawable_image_id(drawable->id),
&xres, &yres);
/* XXX hack: should really note both resolutions, and use
* rectangular cells, not square cells. But I'm being lazy,
* and the majority of the world works with xres == yres */
pvals_ui.input_spi = xres;
}
#endif
st.input_spi = NULL;

View file

@ -466,18 +466,11 @@ static gint32 load_image (char *filename) {
/* any resolution info in the file? */
#ifdef GIMP_HAVE_RESOLUTION_INFO
{
float xres=0, yres=0;
float xres=0.0, yres=0.0;
unsigned short units;
float res=0.0;
if (TIFFGetField (tif, TIFFTAG_XRESOLUTION, &xres)) {
if (TIFFGetField (tif, TIFFTAG_YRESOLUTION, &yres)) {
if (abs(xres - yres) > 1e-5)
g_message("TIFF warning: x resolution differs "
"from y resolution (%g != %g)\n"
"Using x resolution\n", xres, yres);
res = xres;
if (TIFFGetField (tif, TIFFTAG_RESOLUTIONUNIT, &units)) {
switch(units) {
@ -485,14 +478,16 @@ static gint32 load_image (char *filename) {
/* ImageMagick writes files with this silly resunit */
g_message("TIFF warning: resolution units meaningless, "
"forcing 72 dpi\n");
res = 72.0;
xres = 72.0;
yres = 72.0;
break;
case RESUNIT_INCH:
break;
case RESUNIT_CENTIMETER:
res = ((float)xres) * 2.54;
xres *= 2.54;
yres *= 2.54;
break;
default:
@ -506,16 +501,18 @@ static gint32 load_image (char *filename) {
}
} else { /* xres but no yres */
g_message("TIFF warning: no y resolution info, assuming same as x\n");
yres = xres;
}
/* sanity check, since division by zero later could be embarrassing */
if (res < 1e-5) {
if (xres < 1e-5 || yres < 1e-5) {
g_message("TIFF: image resolution is zero: forcing 72 dpi\n");
res = 72.0;
xres = 72.0;
yres = 72.0;
}
/* now set the new image's resolution info */
gimp_image_set_resolution (image, res);
gimp_image_set_resolution (image, xres, yres);
}
/* no x res tag => we assume we have no resolution info, so we
@ -1133,11 +1130,15 @@ static gint save_image (char *filename, gint32 image, gint32 layer) {
#ifdef GIMP_HAVE_RESOLUTION_INFO
/* resolution fields */
{
float resolution = gimp_image_get_resolution(image);
if (resolution)
float xresolution;
float yresolution;
gimp_image_get_resolution (image, &xresolution, &yresolution);
if (xresolution > 1e-5 && yresolution > 1e-5)
{
TIFFSetField (tif, TIFFTAG_XRESOLUTION, resolution);
TIFFSetField (tif, TIFFTAG_YRESOLUTION, resolution);
TIFFSetField (tif, TIFFTAG_XRESOLUTION, xresolution);
TIFFSetField (tif, TIFFTAG_YRESOLUTION, yresolution);
TIFFSetField (tif, TIFFTAG_RESOLUTIONUNIT, RESUNIT_INCH);
}
}