diff options
| author | Jörg Frings-Fürst <debian@jff.email> | 2022-02-01 15:26:02 +0100 | 
|---|---|---|
| committer | Jörg Frings-Fürst <debian@jff.email> | 2022-02-01 15:26:02 +0100 | 
| commit | 5de81480e84023d91763d89e4523de88df42c194 (patch) | |
| tree | cb83e4c8216cf0e8bcaa17a6f2cb64cf4d7f469a /backend/escl/escl_jpeg.c | |
| parent | 97e55bdc5cdf59304af739e65f416320bcbcf599 (diff) | |
| parent | 8e5d399808d2270ae9d56c96560a021e594d18a4 (diff) | |
Merge branch 'feature/upstream' into develop
Diffstat (limited to 'backend/escl/escl_jpeg.c')
| -rw-r--r-- | backend/escl/escl_jpeg.c | 53 | 
1 files changed, 30 insertions, 23 deletions
| diff --git a/backend/escl/escl_jpeg.c b/backend/escl/escl_jpeg.c index 651e7c5..1dd3ec9 100644 --- a/backend/escl/escl_jpeg.c +++ b/backend/escl/escl_jpeg.c @@ -192,34 +192,41 @@ get_JPEG_data(capabilities_t *scanner, int *width, int *height, int *bps)      cinfo.out_color_space = JCS_RGB;      cinfo.quantize_colors = FALSE;      jpeg_calc_output_dimensions(&cinfo); -    if (cinfo.output_width < (unsigned int)scanner->caps[scanner->source].width) -          scanner->caps[scanner->source].width = cinfo.output_width; -    if (scanner->caps[scanner->source].pos_x < 0) -          scanner->caps[scanner->source].pos_x = 0; - -    if (cinfo.output_height < (unsigned int)scanner->caps[scanner->source].height) -           scanner->caps[scanner->source].height = cinfo.output_height; -    if (scanner->caps[scanner->source].pos_y < 0) -          scanner->caps[scanner->source].pos_y = 0; +    double ratio = (double)cinfo.output_width / (double)scanner->caps[scanner->source].width; +    int rw = (int)((double)scanner->caps[scanner->source].width * ratio); +    int rh = (int)((double)scanner->caps[scanner->source].height * ratio); +    int rx = (int)((double)scanner->caps[scanner->source].pos_x * ratio); +    int ry = (int)((double)scanner->caps[scanner->source].pos_y * ratio); + + +    if (cinfo.output_width < (unsigned int)rw) +          rw = cinfo.output_width; +    if (rx < 0) +          rx = 0; + +    if (cinfo.output_height < (unsigned int)rh) +          rh = cinfo.output_height; +    if (ry < 0) +          ry = 0;      DBG(10, "1-JPEF Geometry [%dx%d|%dx%d]\n", -	        scanner->caps[scanner->source].pos_x, -	        scanner->caps[scanner->source].pos_y, -	        scanner->caps[scanner->source].width, -	        scanner->caps[scanner->source].height); -    x_off = scanner->caps[scanner->source].pos_x; -    if (x_off > (unsigned int)scanner->caps[scanner->source].width) { -       w = scanner->caps[scanner->source].width; +	        rx, +	        ry, +	        rw, +	        rh); +    x_off = rx; +    if (x_off > (unsigned int)rw) { +       w = rw;         x_off = 0;      }      else -       w = scanner->caps[scanner->source].width - x_off; -    y_off = scanner->caps[scanner->source].pos_y; -    if(y_off > (unsigned int)scanner->caps[scanner->source].height) { -       h = scanner->caps[scanner->source].height; +       w = rw - x_off; +    y_off = ry; +    if(y_off > (unsigned int)rh) { +       h = rh;         y_off = 0;      }      else -       h = scanner->caps[scanner->source].height - y_off; +       h = rh - y_off;      DBG(10, "2-JPEF Geometry [%dx%d|%dx%d]\n",  	        x_off,  	        y_off, @@ -242,7 +249,7 @@ get_JPEG_data(capabilities_t *scanner, int *width, int *height, int *bps)      if (y_off > 0)          jpeg_skip_scanlines(&cinfo, y_off);      pos = 0; -    while (cinfo.output_scanline < (unsigned int)scanner->caps[scanner->source].height) { +    while (cinfo.output_scanline < (unsigned int)rh) {          rowptr[0] = (JSAMPROW)surface + (lineSize * pos); // ..cinfo.output_scanline);          jpeg_read_scanlines(&cinfo, rowptr, (JDIMENSION) 1);         pos++; @@ -253,7 +260,7 @@ get_JPEG_data(capabilities_t *scanner, int *width, int *height, int *bps)      *width = w;      *height = h;      *bps = cinfo.output_components; -    jpeg_finish_decompress(&cinfo); +    // jpeg_finish_decompress(&cinfo);      jpeg_destroy_decompress(&cinfo);      fclose(scanner->tmp);      scanner->tmp = NULL; | 
