Fixed color scan problem.

DEVEL_2_0_BRANCH-1
Frank Zago 2002-03-07 23:57:40 +00:00
rodzic 8016aca0d8
commit 5e0caa5b45
3 zmienionych plików z 15 dodań i 11 usunięć

Wyświetl plik

@ -49,7 +49,7 @@
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/
#define BUILD 7 /* 2002-03-02 */ #define BUILD 8 /* 2002-03-07 */
#define BACKEND_NAME sceptre #define BACKEND_NAME sceptre
#define SCEPTRE_CONFIG_FILE "sceptre.conf" #define SCEPTRE_CONFIG_FILE "sceptre.conf"
@ -1556,6 +1556,8 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
if (!(dev->scanning)) if (!(dev->scanning))
{ {
/* Prepare the parameters for the caller. */
memset (&dev->params, 0, sizeof (SANE_Parameters));
if (dev->val[OPT_PREVIEW].w == SANE_TRUE) if (dev->val[OPT_PREVIEW].w == SANE_TRUE)
{ {
@ -1629,9 +1631,6 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
break; break;
} }
/* Prepare the parameters for the caller. */
memset (&dev->params, 0, sizeof (SANE_Parameters));
/* this scanner does only one pass */ /* this scanner does only one pass */
dev->params.last_frame = SANE_TRUE; dev->params.last_frame = SANE_TRUE;
dev->params.depth = dev->depth; dev->params.depth = dev->depth;
@ -1677,8 +1676,9 @@ sane_get_parameters (SANE_Handle handle, SANE_Parameters * params)
} }
} }
dev->params.bytes_per_line = dev->params.bytes_per_line = dev->params.pixels_per_line;
dev->params.pixels_per_line * (dev->depth / 8); if (dev->scan_mode == SCEPTRE_COLOR)
dev->params.bytes_per_line *= 3;
/* lines number rounding rules: /* lines number rounding rules:
* 2n + [0.0 .. 2.0[ -> round to 2n * 2n + [0.0 .. 2.0[ -> round to 2n
@ -1825,14 +1825,18 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len,
/* /*
* Try to read the maximum number of bytes. * Try to read the maximum number of bytes.
* *
* The windows driver reads no more than 0xffff byte, I've tried * The windows driver reads no more than 0xffff bytes, I've tried
* some bigger values, but the scanner is losing data!!! * some bigger values, but the scanner is losing data!!!
*/ */
size = data_left; size = dev->bytes_left;
if (size > dev->buffer_size) if (size > dev->buffer_size)
{ {
size = dev->buffer_size; size = dev->buffer_size;
} }
if (size > data_left)
{
size = data_left;
}
/* If it is a preview, read only what we have been asked /* If it is a preview, read only what we have been asked
* for. Else, try to maximize the throughput. * for. Else, try to maximize the throughput.
@ -1878,7 +1882,7 @@ sane_read (SANE_Handle handle, SANE_Byte * buf, SANE_Int max_len,
/* Still got some data. Send it. */ /* Still got some data. Send it. */
if (size > (size_t) max_len) if (size > (size_t) max_len)
size = max_len; size = max_len;
if (size > (size_t) dev->bytes_left) if (size > dev->bytes_left)
size = dev->bytes_left; size = dev->bytes_left;
memcpy (buf, dev->image + dev->image_begin, size); memcpy (buf, dev->image + dev->image_begin, size);

Wyświetl plik

@ -10,7 +10,7 @@
; ;
:backend "sceptre" :backend "sceptre"
:version "1.0-7" ; version of backend :version "1.0-8" ; version of backend
:status :new ; :alpha, :beta, :stable, :new :status :new ; :alpha, :beta, :stable, :new
:manpage "sane-sceptre" ; name of manpage :manpage "sane-sceptre" ; name of manpage
:url "http://www.geocities.com/harikus2000/sane" ; backend's web page :url "http://www.geocities.com/harikus2000/sane" ; backend's web page

Wyświetl plik

@ -345,7 +345,7 @@ typedef struct Sceptre_Scanner
int depth; /* depth per color */ int depth; /* depth per color */
int halftone_param; /* haltone number, valid for SCEPTRE_HALFTONE */ int halftone_param; /* haltone number, valid for SCEPTRE_HALFTONE */
int bytes_left; /* number of bytes promised to backend size_t bytes_left; /* number of bytes promised to backend
* left to read. */ * left to read. */
int color_shift; /* for color scan: number of lines to int color_shift; /* for color scan: number of lines to