[sane-devel] Re: [patch] xscanimage: resolution of the resulting GIMP image
Henning Meier-Geinitz
henning at meier-geinitz.de
Sun Feb 2 00:24:38 GMT 2003
Hi,
On Sun, Jan 12, 2003 at 11:17:37PM +0100, Aurelien Jarno wrote:
> > A bit too late for 1.0.10 but after that we can include the patch.
I've added a patch based on your code to CVS now.
> I modified my patch using your advices, it should be better.
Two more changes: I check if the option type is SANE_TYPE_INT or
SANE_TYPE_FIXED. And calling sane_control_option should be done before
sane_start.
Bye,
Henning
Index: src/xscanimage.c
===================================================================
RCS file: /cvsroot/external/sane/sane-frontends/src/xscanimage.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -u -r1.19 -r1.20
--- src/xscanimage.c 30 Dec 2002 14:32:32 -0000 1.19
+++ src/xscanimage.c 2 Feb 2003 00:21:07 -0000 1.20
@@ -394,6 +394,43 @@
#endif /* HAVE_LIBGIMP_GIMP_H */
+static
+SANE_Word get_resolution (SANE_Handle dev)
+{
+ SANE_Status status;
+ SANE_Word resolution;
+ SANE_Int num_options, i;
+ const SANE_Option_Descriptor *option_desc;
+
+ status = sane_control_option (dev, 0, SANE_ACTION_GET_VALUE, &num_options, 0);
+ if (status != SANE_STATUS_GOOD)
+ return 0;
+
+ for (i = 1; i < num_options; i++)
+ {
+ option_desc = sane_get_option_descriptor (dev, i);
+ if (option_desc)
+ if (option_desc->name)
+ {
+ if (strncmp (option_desc->name, SANE_NAME_SCAN_RESOLUTION,
+ sizeof(SANE_NAME_SCAN_RESOLUTION)) == 0)
+ {
+ sane_control_option (dev, i, SANE_ACTION_GET_VALUE,
+ &resolution, 0);
+ if (status == SANE_STATUS_GOOD)
+ {
+ if (option_desc->type == SANE_TYPE_INT)
+ return resolution;
+ else if (option_desc->type == SANE_TYPE_FIXED)
+ return (SANE_Word) SANE_UNFIX (resolution);
+ }
+ return 0;
+ }
+ }
+ }
+ return 0;
+}
+
static void
update_preview (GSGDialog *dialog, void *arg)
{
@@ -923,6 +960,11 @@
{
SANE_Status status;
SANE_Handle dev = gsg_dialog_get_device (dialog);
+
+#ifdef HAVE_LIBGIMP_GIMP_H
+ SANE_Word resolution;
+#endif /* HAVE_LIBGIMP_GIMP_H */
+
const char *frame_type = 0;
char buf[256];
int fd;
@@ -958,6 +1000,10 @@
}
#endif /* HAVE_LIBGIMP_GIMP_H */
+#ifdef GIMP_HAVE_RESOLUTION_INFO
+ resolution = get_resolution(dev);
+#endif
+
scan_win.x = scan_win.y = 0;
while (gtk_events_pending ())
@@ -1087,6 +1133,14 @@
scan_win.image_ID = gimp_image_new (scan_win.param.pixels_per_line,
scan_win.param.lines, image_type);
+
+/* the following is supported since gimp-1.1.0 */
+#ifdef GIMP_HAVE_RESOLUTION_INFO
+ if (resolution > 0)
+ gimp_image_set_resolution(scan_win.image_ID, resolution,
+ resolution);
+#endif
+
layer_ID = gimp_layer_new (scan_win.image_ID, "Background",
scan_win.param.pixels_per_line,
scan_win.param.lines,
More information about the sane-devel
mailing list