|
Toshihiro Shimizu |
890ddd |
#include <stdio.h></stdio.h>
|
|
Toshihiro Shimizu |
890ddd |
#include "inforegion.h"
|
|
Toshihiro Shimizu |
890ddd |
#include "tnz4.h"
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
12c444 |
#ifndef min
|
|
Shinya Kitaoka |
120a6e |
#define min(a, b) (((a) < (b)) ? (a) : (b))
|
|
Shinya Kitaoka |
12c444 |
#endif
|
|
Shinya Kitaoka |
12c444 |
#ifndef max
|
|
Shinya Kitaoka |
120a6e |
#define max(a, b) (((a) > (b)) ? (a) : (b))
|
|
Shinya Kitaoka |
12c444 |
#endif
|
|
Shinya Kitaoka |
12c444 |
|
|
Shinya Kitaoka |
120a6e |
void getInfoRegion(INFO_REGION *region, int x1_out, int y1_out, int x2_out,
|
|
Shinya Kitaoka |
120a6e |
int y2_out, int scale, int width_in, int height_in) {
|
|
Shinya Kitaoka |
120a6e |
/*
|
|
Shinya Kitaoka |
120a6e |
* I suffissi _in e _out sono relativi alle immagini di
|
|
Shinya Kitaoka |
120a6e |
* input e output, cioe' all'immagine sorgente (input)
|
|
Shinya Kitaoka |
120a6e |
* ca cui prendere (leggere) la regione voluta (output).
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
int x1_in, y1_in, x2_in, y2_in;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
#define SWAP(a, b) \
|
|
Shinya Kitaoka |
120a6e |
{ \
|
|
Shinya Kitaoka |
120a6e |
int tmp; \
|
|
Shinya Kitaoka |
120a6e |
tmp = a; \
|
|
Shinya Kitaoka |
120a6e |
a = b; \
|
|
Shinya Kitaoka |
120a6e |
b = tmp; \
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Scambia le coordinate della regione da leggere se invertite */
|
|
Shinya Kitaoka |
120a6e |
if (x1_out > x2_out) SWAP(x1_out, x2_out);
|
|
Shinya Kitaoka |
120a6e |
if (y1_out > y2_out) SWAP(y1_out, y2_out);
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
#ifdef DEBUG
|
|
Shinya Kitaoka |
120a6e |
/* Controllo della consistenza delle coordinate della regione */
|
|
Shinya Kitaoka |
120a6e |
if (((x2_out - x1_out) < 0) || ((y2_out - y1_out) < 0))
|
|
Shinya Kitaoka |
120a6e |
printf("warning: bad region coord.\n");
|
|
Toshihiro Shimizu |
890ddd |
#endif
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
/* Copia delle coordinate della regione per region globale */
|
|
Shinya Kitaoka |
120a6e |
region->x1 = x1_out;
|
|
Shinya Kitaoka |
120a6e |
region->y1 = y1_out;
|
|
Shinya Kitaoka |
120a6e |
region->x2 = x2_out;
|
|
Shinya Kitaoka |
120a6e |
region->y2 = y2_out;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Imposta le dimensioni dell'immagine in output */
|
|
Shinya Kitaoka |
120a6e |
if (scale <= 0) {
|
|
Shinya Kitaoka |
120a6e |
printf("error: scale value negative or zero\n");
|
|
Shinya Kitaoka |
120a6e |
return;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
region->xsize = ((x2_out - x1_out + 1) - 1) / scale + 1;
|
|
Shinya Kitaoka |
120a6e |
region->ysize = ((y2_out - y1_out + 1) - 1) / scale + 1;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Passo sull'asse delle y e delle x */
|
|
Shinya Kitaoka |
120a6e |
region->step = scale;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Coordinate immagine sorgente */
|
|
Shinya Kitaoka |
120a6e |
x1_in = 0;
|
|
Shinya Kitaoka |
120a6e |
y1_in = 0;
|
|
Shinya Kitaoka |
120a6e |
x2_in = width_in - 1;
|
|
Shinya Kitaoka |
120a6e |
y2_in = height_in - 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Dimensioni immagine sorgente */
|
|
Shinya Kitaoka |
120a6e |
region->lx_in = width_in;
|
|
Shinya Kitaoka |
120a6e |
region->ly_in = height_in;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Numero di righe e colonne dell'immagine sorgente da scandire */
|
|
Shinya Kitaoka |
120a6e |
region->scanNcol = region->xsize;
|
|
Shinya Kitaoka |
120a6e |
region->scanNrow = region->ysize;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Coordinate all'interno dell'immagine sorgente, da cui deve
|
|
Shinya Kitaoka |
120a6e |
* partire la scansione.
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
region->startScanRow = y1_out;
|
|
Shinya Kitaoka |
120a6e |
region->startScanCol = x1_out - x1_in;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*
|
|
Shinya Kitaoka |
120a6e |
* Questi offset sono relativi al buffer di uscita, nel caso
|
|
Shinya Kitaoka |
120a6e |
* in cui una parte della regione sfora rispetto all'immagine
|
|
Shinya Kitaoka |
120a6e |
* sorgente.
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
region->x_offset = 0;
|
|
Shinya Kitaoka |
120a6e |
region->y_offset = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* La regione sfora sulla destra e sulla sinistra */
|
|
Shinya Kitaoka |
120a6e |
if (x2_out > x2_in && x1_out < x1_in) {
|
|
Shinya Kitaoka |
120a6e |
region->scanNcol = width_in / scale;
|
|
Shinya Kitaoka |
120a6e |
region->x_offset = (x1_in - x1_out) / scale;
|
|
Shinya Kitaoka |
120a6e |
region->startScanCol = 0;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
/* La regione sfora solo sulla destra */
|
|
Shinya Kitaoka |
120a6e |
if (x2_out > x2_in) {
|
|
Shinya Kitaoka |
120a6e |
region->scanNcol = (x2_in - x1_out) / scale + 1;
|
|
Shinya Kitaoka |
120a6e |
region->x_offset = 0;
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
/* La regione sfora solo sulla sinistra */
|
|
Shinya Kitaoka |
120a6e |
if (x1_out < x1_in) {
|
|
Shinya Kitaoka |
120a6e |
region->x_offset = (x1_in - x1_out) / scale;
|
|
Shinya Kitaoka |
120a6e |
region->scanNcol = (x2_out - x1_in) / scale + 1;
|
|
Shinya Kitaoka |
120a6e |
region->startScanCol = 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* La regione sfora in alto e in basso */
|
|
Shinya Kitaoka |
120a6e |
if (y2_out > y2_in && y1_out < y1_in) {
|
|
Shinya Kitaoka |
120a6e |
region->scanNrow = height_in / scale;
|
|
Shinya Kitaoka |
120a6e |
region->y_offset = (y1_in - y1_out) / scale;
|
|
Shinya Kitaoka |
120a6e |
region->startScanRow = 0;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
/* La regione sfora solo in alto */
|
|
Shinya Kitaoka |
120a6e |
if (y2_out > y2_in) {
|
|
Shinya Kitaoka |
120a6e |
region->scanNrow = (y2_in - y1_out) / scale + 1;
|
|
Shinya Kitaoka |
120a6e |
region->y_offset = 0;
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
/* La regione sfora solo in basso */
|
|
Shinya Kitaoka |
120a6e |
if (y1_out < y1_in) {
|
|
Shinya Kitaoka |
120a6e |
region->scanNrow = (y2_out - y1_in) / scale + 1;
|
|
Shinya Kitaoka |
120a6e |
region->y_offset = (y1_in - y1_out) / scale;
|
|
Shinya Kitaoka |
120a6e |
region->startScanRow = 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*---------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
int get_info_region(EXT_INFO_REGION *region, int x1_out, int y1_out, int x2_out,
|
|
Shinya Kitaoka |
120a6e |
int y2_out, int scale, int width_in, int height_in,
|
|
Shinya Kitaoka |
120a6e |
int orientation) {
|
|
Shinya Kitaoka |
120a6e |
/*
|
|
Shinya Kitaoka |
120a6e |
* I suffissi _in e _out sono relativi alle immagini di
|
|
Shinya Kitaoka |
120a6e |
* input e output, cioe' all'immagine sorgente (input)
|
|
Shinya Kitaoka |
120a6e |
* ca cui prendere (leggere) la regione voluta (output).
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
int x1_in, y1_in, x2_in, y2_in;
|
|
Shinya Kitaoka |
120a6e |
int appo, appoNcol, appoNrow;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
#define SWAP(a, b) \
|
|
Shinya Kitaoka |
120a6e |
{ \
|
|
Shinya Kitaoka |
120a6e |
int tmp; \
|
|
Shinya Kitaoka |
120a6e |
tmp = a; \
|
|
Shinya Kitaoka |
120a6e |
a = b; \
|
|
Shinya Kitaoka |
120a6e |
b = tmp; \
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Scambia le coordinate della regione da leggere se invertite */
|
|
Shinya Kitaoka |
120a6e |
if (x1_out > x2_out) SWAP(x1_out, x2_out);
|
|
Shinya Kitaoka |
120a6e |
if (y1_out > y2_out) SWAP(y1_out, y2_out);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Controllo della consistenza delle coordinate della regione */
|
|
Shinya Kitaoka |
120a6e |
if (((x2_out - x1_out) < 1) || ((y2_out - y1_out) < 1)) {
|
|
Shinya Kitaoka |
120a6e |
printf("error: bad image read region coordinates\n");
|
|
Shinya Kitaoka |
120a6e |
return FALSE;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Copia delle coordinate della regione per region globale */
|
|
Shinya Kitaoka |
120a6e |
region->x1 = x1_out;
|
|
Shinya Kitaoka |
120a6e |
region->y1 = y1_out;
|
|
Shinya Kitaoka |
120a6e |
region->x2 = x2_out;
|
|
Shinya Kitaoka |
120a6e |
region->y2 = y2_out;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Imposta le dimensioni dell'immagine in output */
|
|
Shinya Kitaoka |
120a6e |
if (scale <= 0) {
|
|
Shinya Kitaoka |
120a6e |
printf("error: scale value negative or zero\n");
|
|
Shinya Kitaoka |
120a6e |
return FALSE;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
region->xsize = (x2_out - x1_out) / scale + 1;
|
|
Shinya Kitaoka |
120a6e |
region->ysize = (y2_out - y1_out) / scale + 1;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Passo sull'asse delle y e delle x */
|
|
Shinya Kitaoka |
120a6e |
region->step = scale;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Coordinate immagine sorgente */
|
|
Shinya Kitaoka |
120a6e |
x1_in = 0;
|
|
Shinya Kitaoka |
120a6e |
y1_in = 0;
|
|
Shinya Kitaoka |
120a6e |
x2_in = width_in - 1;
|
|
Shinya Kitaoka |
120a6e |
y2_in = height_in - 1;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Dimensioni immagine sorgente */
|
|
Shinya Kitaoka |
120a6e |
region->lx_in = width_in;
|
|
Shinya Kitaoka |
120a6e |
region->ly_in = height_in;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Numero di righe e colonne dell'immagine sorgente da scandire */
|
|
Shinya Kitaoka |
120a6e |
region->scanNcol = region->xsize;
|
|
Shinya Kitaoka |
120a6e |
region->scanNrow = region->ysize;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* Coordinate all'interno dell'immagine sorgente, da cui deve
|
|
Shinya Kitaoka |
120a6e |
* partire la scansione.
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
region->startScanRow = y1_out;
|
|
Shinya Kitaoka |
120a6e |
region->startScanCol = x1_out;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/*
|
|
Shinya Kitaoka |
120a6e |
* Questi offset sono relativi al buffer di uscita, nel caso
|
|
Shinya Kitaoka |
120a6e |
* in cui una parte della regione sfora rispetto all'immagine
|
|
Shinya Kitaoka |
120a6e |
* sorgente.
|
|
Shinya Kitaoka |
120a6e |
*/
|
|
Shinya Kitaoka |
120a6e |
region->x_offset = 0;
|
|
Shinya Kitaoka |
120a6e |
region->y_offset = 0;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* La regione sfora sulla destra e sulla sinistra */
|
|
Shinya Kitaoka |
120a6e |
if (x2_out > x2_in && x1_out < x1_in) {
|
|
Shinya Kitaoka |
120a6e |
region->scanNcol = (width_in - 1) / scale /* +1 */;
|
|
Shinya Kitaoka |
120a6e |
region->x_offset = (x1_in - x1_out + scale - 1) / scale;
|
|
Shinya Kitaoka |
120a6e |
region->startScanCol = 0;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
/* La regione sfora solo sulla destra */
|
|
Shinya Kitaoka |
120a6e |
if (x2_out > x2_in) {
|
|
Shinya Kitaoka |
120a6e |
region->scanNcol = (x2_in - x1_out) / scale /* +1 */;
|
|
Shinya Kitaoka |
120a6e |
region->x_offset = 0;
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
/* La regione sfora solo sulla sinistra */
|
|
Shinya Kitaoka |
120a6e |
if (x1_out < x1_in) {
|
|
Shinya Kitaoka |
120a6e |
region->scanNcol = (x2_out - x1_in) / scale /* +1 */;
|
|
Shinya Kitaoka |
120a6e |
region->x_offset = (x1_in - x1_out + scale - 1) / scale;
|
|
Shinya Kitaoka |
120a6e |
region->startScanCol = 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
/* La regione sfora in alto e in basso */
|
|
Shinya Kitaoka |
120a6e |
if (y2_out > y2_in && y1_out < y1_in) {
|
|
Shinya Kitaoka |
120a6e |
region->scanNrow = (height_in - 1) / scale /* +1 */;
|
|
Shinya Kitaoka |
120a6e |
region->y_offset = (y1_in - y1_out + scale - 1) / scale;
|
|
Shinya Kitaoka |
120a6e |
region->startScanRow = 0;
|
|
Shinya Kitaoka |
120a6e |
} else {
|
|
Shinya Kitaoka |
120a6e |
/* La regione sfora solo in alto */
|
|
Shinya Kitaoka |
120a6e |
if (y2_out > y2_in) {
|
|
Shinya Kitaoka |
120a6e |
region->scanNrow = (y2_in - y1_out) / scale /* +1 */;
|
|
Shinya Kitaoka |
120a6e |
region->y_offset = 0;
|
|
Shinya Kitaoka |
120a6e |
} else
|
|
Shinya Kitaoka |
120a6e |
/* La regione sfora solo in basso */
|
|
Shinya Kitaoka |
120a6e |
if (y1_out < y1_in) {
|
|
Shinya Kitaoka |
120a6e |
region->scanNrow = (y2_out - y1_in) / scale /* +1 */;
|
|
Shinya Kitaoka |
120a6e |
region->y_offset = (y1_in - y1_out + scale - 1) / scale;
|
|
Shinya Kitaoka |
120a6e |
region->startScanRow = 0;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
appoNcol = min((region->scanNcol * scale), width_in);
|
|
Shinya Kitaoka |
120a6e |
appoNrow = min((region->scanNrow * scale), height_in);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
switch (orientation) {
|
|
Shinya Kitaoka |
120a6e |
case TNZ_TOPLEFT:
|
|
Shinya Kitaoka |
120a6e |
region->buf_inc = 1;
|
|
Shinya Kitaoka |
120a6e |
region->y_offset += region->scanNrow - 1;
|
|
Shinya Kitaoka |
120a6e |
region->verso_x = 0;
|
|
Shinya Kitaoka |
120a6e |
region->verso_y = -1;
|
|
Shinya Kitaoka |
120a6e |
region->sxpix = region->startScanCol;
|
|
Shinya Kitaoka |
120a6e |
region->sypix = height_in - region->startScanRow - appoNrow;
|
|
Shinya Kitaoka |
120a6e |
region->sypix = max(0, region->sypix);
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TNZ_TOPRIGHT:
|
|
Shinya Kitaoka |
120a6e |
region->buf_inc = -1;
|
|
Shinya Kitaoka |
120a6e |
region->y_offset += region->scanNrow - 1;
|
|
Shinya Kitaoka |
120a6e |
region->x_offset += region->scanNcol - 1;
|
|
Shinya Kitaoka |
120a6e |
region->verso_x = 0;
|
|
Shinya Kitaoka |
120a6e |
region->verso_y = -1;
|
|
Shinya Kitaoka |
120a6e |
region->sxpix = width_in - region->startScanCol - appoNcol;
|
|
Shinya Kitaoka |
120a6e |
region->sypix = height_in - region->startScanRow - appoNrow;
|
|
Shinya Kitaoka |
120a6e |
region->sxpix = max(0, region->sxpix);
|
|
Shinya Kitaoka |
120a6e |
region->sypix = max(0, region->sypix);
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TNZ_BOTRIGHT:
|
|
Shinya Kitaoka |
120a6e |
region->buf_inc = -1;
|
|
Shinya Kitaoka |
120a6e |
region->x_offset += region->scanNcol - 1;
|
|
Shinya Kitaoka |
120a6e |
region->verso_x = 0;
|
|
Shinya Kitaoka |
120a6e |
region->verso_y = 1;
|
|
Shinya Kitaoka |
120a6e |
region->sxpix = width_in - region->startScanCol - appoNcol;
|
|
Shinya Kitaoka |
120a6e |
region->sypix = region->startScanRow;
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TNZ_BOTLEFT:
|
|
Shinya Kitaoka |
120a6e |
region->buf_inc = 1;
|
|
Shinya Kitaoka |
120a6e |
region->verso_x = 0;
|
|
Shinya Kitaoka |
120a6e |
region->verso_y = 1;
|
|
Shinya Kitaoka |
120a6e |
region->sxpix = region->startScanCol;
|
|
Shinya Kitaoka |
120a6e |
region->sypix = region->startScanRow;
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TNZ_LEFTOP:
|
|
Shinya Kitaoka |
120a6e |
region->buf_inc = -region->xsize;
|
|
Shinya Kitaoka |
120a6e |
region->y_offset += region->scanNrow - 1;
|
|
Shinya Kitaoka |
120a6e |
region->verso_x = 1;
|
|
Shinya Kitaoka |
120a6e |
region->verso_y = 0;
|
|
Shinya Kitaoka |
120a6e |
region->sxpix = height_in - region->startScanRow - appoNrow;
|
|
Shinya Kitaoka |
120a6e |
region->sypix = region->startScanCol;
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TNZ_RIGHTOP:
|
|
Shinya Kitaoka |
120a6e |
region->buf_inc = -region->xsize;
|
|
Shinya Kitaoka |
120a6e |
region->y_offset += region->scanNrow - 1;
|
|
Shinya Kitaoka |
120a6e |
region->x_offset += region->scanNcol - 1;
|
|
Shinya Kitaoka |
120a6e |
region->verso_x = -1;
|
|
Shinya Kitaoka |
120a6e |
region->verso_y = 0;
|
|
Shinya Kitaoka |
120a6e |
if ((region->sxpix = height_in - region->startScanRow - appoNrow) < 0)
|
|
Shinya Kitaoka |
120a6e |
region->sxpix = 0;
|
|
Shinya Kitaoka |
120a6e |
if ((region->sypix = width_in - region->startScanCol - appoNcol) < 0)
|
|
Shinya Kitaoka |
120a6e |
region->sypix = 0;
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TNZ_RIGHTBOT:
|
|
Shinya Kitaoka |
120a6e |
region->buf_inc = region->xsize;
|
|
Shinya Kitaoka |
120a6e |
region->x_offset += region->scanNcol - 1;
|
|
Shinya Kitaoka |
120a6e |
region->verso_x = -1;
|
|
Shinya Kitaoka |
120a6e |
region->verso_y = 0;
|
|
Shinya Kitaoka |
120a6e |
region->sxpix = region->startScanRow;
|
|
Shinya Kitaoka |
120a6e |
region->sypix = width_in - region->startScanCol - appoNcol;
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
case TNZ_LEFTBOT:
|
|
Shinya Kitaoka |
120a6e |
region->buf_inc = region->xsize;
|
|
Shinya Kitaoka |
120a6e |
region->verso_x = 1;
|
|
Shinya Kitaoka |
120a6e |
region->verso_y = 0;
|
|
Shinya Kitaoka |
120a6e |
region->sxpix = region->startScanRow;
|
|
Shinya Kitaoka |
120a6e |
region->sypix = region->startScanCol;
|
|
Shinya Kitaoka |
120a6e |
break;
|
|
Shinya Kitaoka |
120a6e |
default:
|
|
Shinya Kitaoka |
120a6e |
printf("error: bad orientation type\n");
|
|
Shinya Kitaoka |
120a6e |
return FALSE;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
/* Se le righe sono verticali, allora ... */
|
|
Shinya Kitaoka |
120a6e |
if (orientation > 4) {
|
|
Shinya Kitaoka |
120a6e |
appo = region->lx_in;
|
|
Shinya Kitaoka |
120a6e |
region->lx_in = region->ly_in;
|
|
Shinya Kitaoka |
120a6e |
region->ly_in = appo;
|
|
Shinya Kitaoka |
120a6e |
appo = region->scanNcol;
|
|
Shinya Kitaoka |
120a6e |
region->scanNcol = region->scanNrow;
|
|
Shinya Kitaoka |
120a6e |
region->scanNrow = appo;
|
|
Shinya Kitaoka |
120a6e |
}
|
|
Shinya Kitaoka |
120a6e |
return TRUE;
|
|
Toshihiro Shimizu |
890ddd |
}
|
|
Toshihiro Shimizu |
890ddd |
|
|
Toshihiro Shimizu |
890ddd |
/*-------------------------------------------------------------------------*/
|
|
Toshihiro Shimizu |
890ddd |
|
|
Shinya Kitaoka |
120a6e |
void print_info_region(EXT_INFO_REGION *region) {
|
|
Shinya Kitaoka |
120a6e |
if (!region) return;
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
printf("IMAGE INPUT:\n");
|
|
Shinya Kitaoka |
120a6e |
printf(" size (lx_in, ly_in)........ (%d,%d)\n", region->lx_in,
|
|
Shinya Kitaoka |
120a6e |
region->ly_in);
|
|
Shinya Kitaoka |
120a6e |
printf(" start offset (sScanCol, sScanRow).. (%d,%d)\n",
|
|
Shinya Kitaoka |
120a6e |
region->startScanCol, region->startScanRow);
|
|
Shinya Kitaoka |
120a6e |
printf(" region size (scanNcol, scanNrow).. (%d,%d)\n",
|
|
Shinya Kitaoka |
120a6e |
region->scanNcol, region->scanNrow);
|
|
Shinya Kitaoka |
120a6e |
printf(" bottom-left (sxpix, sypix)........ (%d,%d)\n", region->sxpix,
|
|
Shinya Kitaoka |
120a6e |
region->sypix);
|
|
Shinya Kitaoka |
120a6e |
printf(" scale (step)................ ( %d)\n", region->step);
|
|
Shinya Kitaoka |
120a6e |
|
|
Shinya Kitaoka |
120a6e |
printf("IMAGE OUTPUT:\n");
|
|
Shinya Kitaoka |
120a6e |
printf(" size (xsize, ysize)........ (%d,%d)\n", region->xsize,
|
|
Shinya Kitaoka |
120a6e |
region->ysize);
|
|
Shinya Kitaoka |
120a6e |
printf(" start offset (x_offset, y_offset).. (%d,%d)\n",
|
|
Shinya Kitaoka |
120a6e |
region->x_offset, region->y_offset);
|
|
Shinya Kitaoka |
120a6e |
printf(" verso (verso_x, verso_y).... (%d,%d)\n", region->verso_x,
|
|
Shinya Kitaoka |
120a6e |
region->verso_y);
|
|
Shinya Kitaoka |
120a6e |
printf(" buffer increment (buf_inc)............. ( %d)\n",
|
|
Shinya Kitaoka |
120a6e |
region->buf_inc);
|
|
Toshihiro Shimizu |
890ddd |
}
|