|
|
|
@ -7,6 +7,7 @@ |
|
|
|
|
#include <stdio.h> |
|
|
|
|
#include <stdlib.h> |
|
|
|
|
#include <unistd.h> |
|
|
|
|
|
|
|
|
|
#include "string.h" |
|
|
|
|
|
|
|
|
|
#include "../floatimg.h" |
|
|
|
@ -14,6 +15,67 @@ |
|
|
|
|
extern int verbosity; /* must be declared around main() */ |
|
|
|
|
|
|
|
|
|
/* ---------------------------------------------------------------- */ |
|
|
|
|
/* nouveau juin 2019, pendant la Ravebish */ |
|
|
|
|
|
|
|
|
|
int fimg_load_from_pnm(char *fname, FloatImg *head, int notused) |
|
|
|
|
{
|
|
|
|
|
FILE *fp; |
|
|
|
|
int width, height, maxval; |
|
|
|
|
int foo, line, column; |
|
|
|
|
unsigned char *buffline, *idxrd; |
|
|
|
|
float *Rptr, *Gptr, *Bptr; |
|
|
|
|
|
|
|
|
|
if (NULL==head) { |
|
|
|
|
fprintf(stderr, "%s : head ptr is %p\n", __func__, head); |
|
|
|
|
return -8; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (NULL==(fp=fopen(fname, "r"))) { |
|
|
|
|
perror(fname); |
|
|
|
|
exit(1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foo = fscanf(fp, "P6 %d %d %d", &width, &height, &maxval); |
|
|
|
|
if (3 != foo) { |
|
|
|
|
fprintf(stderr, "%s : fscanf -> %d\n", __func__, foo); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (verbosity) { |
|
|
|
|
fprintf(stderr, "%s is %dx%d , max=%d\n",fname, width, height, maxval); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (NULL==(buffline=calloc(3, width))) { |
|
|
|
|
fprintf(stderr, "%s on %s : memory error\n", __func__, fname); |
|
|
|
|
return -2; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foo = fimg_create(head, width, height, 3); |
|
|
|
|
if (foo) { |
|
|
|
|
fprintf(stderr, "%s : create floatimg -> %d\n", __func__, foo); |
|
|
|
|
exit(1); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fseek(fp, 1L, SEEK_CUR); /* black magic */ |
|
|
|
|
|
|
|
|
|
Rptr = head->R; Gptr = head->G; Bptr = head->B; |
|
|
|
|
for (line=0; line<height; line++) { |
|
|
|
|
foo = fread(buffline, 3, width, fp); |
|
|
|
|
fprintf(stderr, "line %d read %d\n", line, width); |
|
|
|
|
idxrd = buffline; |
|
|
|
|
for (column=0; column<width; column++) |
|
|
|
|
{ |
|
|
|
|
*Rptr++ = (float)*idxrd++; |
|
|
|
|
*Gptr++ = (float)*idxrd++; |
|
|
|
|
*Bptr++ = (float)*idxrd++; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fclose(fp); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/* ---------------------------------------------------------------- */ |
|
|
|
|
|
|
|
|
|
int fimg_save_as_pnm(FloatImg *head, char *fname, int notused) |
|
|
|
|