i can now read a few portable pixmap, the P6 type
This commit is contained in:
		
							parent
							
								
									998aee43fb
								
							
						
					
					
						commit
						ea70dd78f6
					
				@ -43,6 +43,7 @@ int   fimg_add_rgb(FloatImg *head, int x, int y, float r, float g, float b);
 | 
			
		||||
 | 
			
		||||
/*	PNM files module		*/
 | 
			
		||||
int fimg_save_as_pnm(FloatImg *head, char *fname, int notused);
 | 
			
		||||
int fimg_load_from_pnm(char *fname, FloatImg *head, int notused);
 | 
			
		||||
 | 
			
		||||
double fimg_timer_set(int whot);
 | 
			
		||||
double fimg_timer_get(int whot);
 | 
			
		||||
 | 
			
		||||
@ -12,6 +12,9 @@ AR=ar
 | 
			
		||||
 | 
			
		||||
all:	$(OBJS) ../libfloatimg.a
 | 
			
		||||
 | 
			
		||||
t:	t.c ../libfloatimg.a $(DEPS)
 | 
			
		||||
	gcc $(COPT) $< ../libfloatimg.a -o $@
 | 
			
		||||
 | 
			
		||||
# --------------------------------------------
 | 
			
		||||
 | 
			
		||||
../libfloatimg.a:	$(OBJS)
 | 
			
		||||
 | 
			
		||||
@ -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)
 | 
			
		||||
 | 
			
		||||
@ -194,6 +194,7 @@ for (i = 0; i < nbre_capt; i++) {
 | 
			
		||||
			    fmt.fmt.pix.width, fmt.fmt.pix.height);
 | 
			
		||||
	fwrite(buffers[buf.index].start, buf.bytesused, 1, fout);
 | 
			
		||||
	fclose(fout);
 | 
			
		||||
 | 
			
		||||
	if (nbre_capt > 1 && period) {
 | 
			
		||||
		sleep(period);
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user