summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohannes Hofmann <Johannes.Hofmann@gmx.de>2008-01-15 23:02:40 +0100
committerJohannes Hofmann <Johannes.Hofmann@gmx.de>2008-01-15 23:02:40 +0100
commite77ec70c29e3db2777b9f625899ec51b4df15b5d (patch)
tree1bca9673572989b7d1562578457e41ec424b223e /src
parent0103847557f98b5a2958065c8e7ef9c0c424a249 (diff)
fix 16bit case
Diffstat (limited to 'src')
-rw-r--r--src/pnm.c1
-rw-r--r--src/pnmcurve.c24
2 files changed, 14 insertions, 11 deletions
diff --git a/src/pnm.c b/src/pnm.c
index b2fa3c8..222e2ee 100644
--- a/src/pnm.c
+++ b/src/pnm.c
@@ -64,4 +64,3 @@ writePnmHeader(FILE *fp, const struct pnm *h) {
return 0;
}
-
diff --git a/src/pnmcurve.c b/src/pnmcurve.c
index 37d2dd2..770de44 100644
--- a/src/pnmcurve.c
+++ b/src/pnmcurve.c
@@ -9,7 +9,7 @@
typedef struct {
int n;
- short value[1];
+ unsigned short value[1];
} table_t;
static int
@@ -69,9 +69,9 @@ main(int argc, char **argv) {
table = buildCurve(curve, in_pnm.maxval + 1, in_pnm.maxval);
- gTable[0] = channels & RED?table:NULL;
- gTable[1] = channels & GREEN?table:NULL;
- gTable[2] = channels & BLUE?table:NULL;
+ gTable[0] = channels & RED ? table : NULL;
+ gTable[1] = channels & GREEN ? table : NULL;
+ gTable[2] = channels & BLUE ? table : NULL;
}
writePnmHeader(stdout, &in_pnm);
@@ -101,19 +101,23 @@ pam_transform(FILE *in_fp, FILE *out_fp,
for (i = 0; i < in_pnm->width; i++) {
for (c = 0; c < 3; c++) {
if (tables[c]) {
- int val = (unsigned char) buf[(i * 3 + c) * nbytes];
+ int val = buf[(i * 3 + c) * nbytes];
if (nbytes == 2) {
- val = (val << 8) |
- (unsigned char) buf[(i * 3 + c) * nbytes + 1];
+ val = (val << 8) | buf[(i * 3 + c) * nbytes + 1];
}
if (val < 0 || val > in_pnm->maxval) {
fprintf(stderr, "Invalid pixel value %d\n", val);
+ free(buf);
return 1;
}
if (nbytes == 1) {
buf[i * 3 + c] = (unsigned char) tables[c]->value[val];
+ } else {
+ int v1 = tables[c]->value[val];
+ buf[(i * 3 + c) * 2] = (unsigned char) (v1 >> 8);
+ buf[(i * 3 + c) * 2 + 1] = (unsigned char) v1;
}
}
}
@@ -166,11 +170,11 @@ buildCurve(const char *ctrl_points, int resolution, int maxval) {
for (i = 0; i < resolution; i++) {
double _x = (double) i / (resolution - 1);
double _y = gsl_spline_eval(spline, _x, acc);
- double dval = _y * (double) maxval + .5;
- if (dval > (double) maxval) dval = (double) maxval;
+ double dval = _y * maxval + .5;
+ if (dval > maxval) dval = (double) maxval;
if (dval < 0) dval = 0;
- table->value[i] = (short) floor(dval);
+ table->value[i] = (unsigned short) floor(dval);
}
gsl_spline_free(spline);