51 if(pxl==NULL)
return(1);
55 if(pxlNr<1)
return(0);
59 if(pxl->
p==NULL)
return(2);
60 for(
long long int i=0; i<pxlNr; i++) {
61 pxl->
p[i].
x=pxl->
p[i].
y=pxl->
p[i].
z=pxl->
p[i].
f=0;
83 if(pxl==NULL)
return(1);
85 if(pxlNr<1)
return(0);
89 long long int newPxlNr, addPxlNr;
90 newPxlNr=pxl->
pxlNr+pxlNr; addPxlNr=newPxlNr-pxl->
_pxlNr;
91 if(addPxlNr<=0)
return(0);
94 pxlPtr=realloc(pxl->
p,
sizeof(
IMG_PIXEL)*newPxlNr);
95 if(pxlPtr==NULL)
return(2);
97 for(
int i=pxl->
_pxlNr; i<newPxlNr; i++)
98 pxl->
p[i].
x=pxl->
p[i].
y=pxl->
p[i].
z=pxl->
p[i].
f=0;
118 if(list==NULL || i>list->
pxlNr)
return(1);
126 for(
long long int li=list->
pxlNr-1; li>=i; li--) list->
p[li+n]=list->
p[li];
146 if(list==NULL || pxl==NULL)
return(1);
171 if(list==NULL || pxl==NULL || i<0 || i>=list->
pxlNr)
return(1);
192 if(list==NULL || img==NULL)
return(1);
195 for(
int zi=0; zi<img->
dimz; zi++)
196 for(
int yi=0; yi<img->
dimy; yi++)
197 for(
int xi=0; xi<img->
dimx; xi++)
198 if(fabs(img->
m[zi][yi][xi][0])>=0.5) n++;
201 for(
int zi=0; zi<img->
dimz; zi++)
202 for(
int yi=0; yi<img->
dimy; yi++)
203 for(
int xi=0; xi<img->
dimx; xi++)
204 if(fabs(img->
m[zi][yi][xi][0])>=0.5) {
228 if(list==NULL || from<0 || to<0)
return;
231 long long int i=from;
234 for(
long long int i=from; i>to; i--) list->
p[i]=list->
p[i-1];
236 for(
long long int i=from; i<to; i++) list->
p[i]=list->
p[i+1];
256 if(list==NULL || index<0)
return(1);
257 if(index>=list->
pxlNr)
return(0);
259 if(index==list->
pxlNr-1) {list->
pxlNr--;
return(0);}
278 if(list==NULL || list->
pxlNr<2)
return(0);
279 long long int i=list->
pxlNr-1, j, n=0;
282 if(list->
p[i].
z!=list->
p[j].
z)
continue;
283 if(list->
p[i].
x!=list->
p[j].
x)
continue;
284 if(list->
p[i].
y!=list->
p[j].
y)
continue;
285 pxlRm(list, i); n++;
break;
308 if(pxl==NULL || pxl->
pxlNr<1 || pxl->
p==NULL) {
309 if(status!=NULL) strcpy(status,
"no pixels to write");
313 for(
long long i=0; i<pxl->
pxlNr && n>6; i++)
314 n=fprintf(fp,
"%d,%d,%d,%d\n",
315 pxl->
p[i].
x, pxl->
p[i].
y, pxl->
p[i].
z, pxl->
p[i].
f);
317 if(status!=NULL) strcpy(status,
"cannot write pixels into file");
320 if(status!=NULL) strcpy(status,
"ok");
342 if(status!=NULL) strcpy(status,
"program error");
345 int i, c, n, longest, ret;
349 fp=fopen(fname,
"r");
351 if(status!=NULL) strcpy(status,
"cannot open file");
356 while((c=fgetc(fp))!=EOF) {
357 if(c==10 || c==13) {
if(i>longest) longest=i; i=0;}
else i++;
359 if(i>longest) longest=i;
360 rewind(fp); longest+=1;
363 line=(
char*)malloc((longest+1)*
sizeof(
char));
365 if(status!=NULL) strcpy(status,
"out of memory");
366 fclose(fp);
return(3);
370 if(status!=NULL) strcpy(status,
"out of memory");
371 fclose(fp); free(line);
return(3);
374 while(fgets(line, longest, fp)!=NULL) {
376 if(line[0]==
'#')
continue;
378 n=
strTokenNr(line,
" ,;\t\n\r");
if(n==0)
continue;
380 if(status!=NULL) strcpy(status,
"invalid format");
381 fclose(fp); free(line);
return(4);
386 if(status!=NULL) strcpy(status,
"out of memory");
387 fclose(fp); free(line);
return(3);
393 if(
strTokenNCpy(line,
" ,;\t\n\r", 1+i, buf, 20)<1) {ret=1;
break;}
396 if(i==0) pxl->
p[pxl->
pxlNr].
x=c;
397 else if(i==1) pxl->
p[pxl->
pxlNr].
y=c;
398 else if(i==2) pxl->
p[pxl->
pxlNr].
z=c;
399 else if(i==3) pxl->
p[pxl->
pxlNr].
f=c;
402 if(status!=NULL) strcpy(status,
"invalid coordinate");
403 fclose(fp); free(line);
return(4);
407 fclose(fp); free(line);
int atoi_with_check(const char *int_as_string, int *result_value)
Header file for libtpcimgio.
int strTokenNCpy(const char *str1, const char *str2, int i, char *str3, int count)
int strTokenNr(const char *str1, const char *str2)
int pxlMakeRoom(IMG_PIXELS *list, long long int i, long long int n)
void pxlFree(IMG_PIXELS *pxl)
int pxlAllocateMore(IMG_PIXELS *pxl, long long int pxlNr)
int pxlGet(IMG_PIXELS *list, long long int i, IMG_PIXEL *pxl)
int pxlAdd(IMG_PIXELS *list, IMG_PIXEL *pxl)
int pxlWrite(IMG_PIXELS *pxl, FILE *fp, char *status)
int pxlRead(IMG_PIXELS *pxl, const char *fname, char *status)
long long int pxlRmDuplicates(IMG_PIXELS *list)
void pxlInit(IMG_PIXELS *pxl)
void pxlMove(IMG_PIXELS *list, long long int from, long long int to)
int pxlAllocate(IMG_PIXELS *pxl, long long int pxlNr)
long long int pxlAddFromMask(IMG_PIXELS *list, IMG *img)
int pxlRm(IMG_PIXELS *list, long long int index)