forked from tTh/FloatImg
126 lines
2.3 KiB
C
126 lines
2.3 KiB
C
|
/*
|
||
|
* fimg-file.c
|
||
|
*
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <unistd.h>
|
||
|
#include "string.h"
|
||
|
|
||
|
#include "../floatimg.h"
|
||
|
|
||
|
extern int verbosity; /* must be declared around main() */
|
||
|
|
||
|
/* ---------------------------------------------------------------- */
|
||
|
int fimg_fileinfos(char *fname, int *datas)
|
||
|
{
|
||
|
FILE *fp;
|
||
|
|
||
|
#if DEBUG_LEVEL
|
||
|
fprintf(stderr, ">>> %-25s ( '%s' %p )\n", __func__, fname, datas);
|
||
|
#endif
|
||
|
|
||
|
fp = fopen(fname, "r");
|
||
|
if (NULL==fp) {
|
||
|
perror(fname);
|
||
|
return -1;
|
||
|
}
|
||
|
if (3 != fread(datas, sizeof(int), 3, fp)) {
|
||
|
fprintf(stderr, "%s: %s short read\n", __func__, fname);
|
||
|
fclose(fp);
|
||
|
return -2;
|
||
|
}
|
||
|
|
||
|
fclose(fp);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
/* ---------------------------------------------------------------- */
|
||
|
int fimg_dump_to_file(FloatImg *head, char *fname, int notused)
|
||
|
{
|
||
|
FILE *fp;
|
||
|
int foo, nbre, dims[3];
|
||
|
|
||
|
#if DEBUG_LEVEL
|
||
|
fprintf(stderr, ">>> %-25s ( %p '%s' %d )\n", __func__, head,
|
||
|
fname, notused);
|
||
|
#endif
|
||
|
|
||
|
if (3 != head->type) {
|
||
|
fprintf(stderr, "%s : bat type %d\n", __func__, head->type);
|
||
|
return -8;
|
||
|
}
|
||
|
|
||
|
fp = fopen(fname, "w");
|
||
|
if (NULL==fp) {
|
||
|
perror(fname);
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
dims[0] = head->width; dims[1] = head->height;
|
||
|
dims[2] = head->type;
|
||
|
|
||
|
foo = fwrite(dims, sizeof(int), 3, fp);
|
||
|
if (3 != foo) {
|
||
|
perror(fname);
|
||
|
fclose(fp);
|
||
|
return -2;
|
||
|
}
|
||
|
nbre = head->width*head->height*3;
|
||
|
#if DEBUG_LEVEL
|
||
|
fprintf(stderr, " %s : data at %p\n", __func__, head->R);
|
||
|
#endif
|
||
|
|
||
|
foo = fwrite(head->R, sizeof(float), nbre, fp);
|
||
|
if (nbre!=foo) {
|
||
|
perror(fname);
|
||
|
fclose(fp);
|
||
|
return -3;
|
||
|
}
|
||
|
|
||
|
fclose(fp);
|
||
|
|
||
|
return 0;
|
||
|
}
|
||
|
/* ---------------------------------------------------------------- */
|
||
|
int fimg_create_from_dump(char *fname, FloatImg *head)
|
||
|
{
|
||
|
FILE *fp;
|
||
|
int foo, dims[3];
|
||
|
|
||
|
#if DEBUG_LEVEL
|
||
|
fprintf(stderr, ">>> %-25s ( '%s' %p )\n", __func__, fname, head);
|
||
|
#endif
|
||
|
|
||
|
fp = fopen(fname, "r");
|
||
|
if (NULL==fp) {
|
||
|
perror(fname);
|
||
|
exit(1);
|
||
|
}
|
||
|
|
||
|
foo = fread(dims, sizeof(int), 3, fp);
|
||
|
if (3 != foo) {
|
||
|
fprintf(stderr, "%s : short read\n", fname);
|
||
|
fclose(fp);
|
||
|
return -1;
|
||
|
}
|
||
|
#if DEBUG_LEVEL
|
||
|
fprintf(stderr, "%s : got [ %d %d %d ] from '%s'\n", __func__,
|
||
|
dims[0], dims[1], dims[2], fname);
|
||
|
#endif
|
||
|
|
||
|
foo = fimg_create(head, dims[0], dims[1], dims[2]);
|
||
|
if (foo) {
|
||
|
fprintf(stderr, "%s : create -> %d\n", __func__, foo);
|
||
|
return foo;
|
||
|
}
|
||
|
|
||
|
foo = fread(head->R, sizeof(float), dims[0]*dims[1]*3, fp);
|
||
|
|
||
|
fclose(fp);
|
||
|
|
||
|
return 0;
|
||
|
}
|