/* * This function was copied from ArchLinux Pacman project * Given a file size, it makes this value easier for human reading :-) * * An example call: * human_size = humanize_size(size, 'M', 2, &label); * pm_asprintf(&str, "%.2f %s", human_size, label); */ double Package::humanizeSize(off_t bytes, const char target_unit, int precision, const char **label) { static const char *labels[] = {"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"}; static const int unitcount = sizeof(labels) / sizeof(labels[0]); double val = (double)bytes; int index; for(index = 0; index < unitcount - 1; index++) { if(target_unit != '\0' && labels[index][0] == target_unit) { break; } else if(target_unit == '\0' && val <= 2048.0 && val >= -2048.0) { break; } val /= 1024.0; } if(label) { *label = labels[index]; } /* fix FS#27924 so that it doesn't display negative zeroes */ if(precision >= 0 && val < 0.0 && val > (-0.5 / simplePow(10, precision))) { val = 0.0; } return val; }
int saveRawImageToFile(char * filename,char * pixels , unsigned int width , unsigned int height , unsigned int channels , unsigned int bitsperpixel) { //fprintf(stderr,"saveRawImageToFile(%s) called\n",filename); if ( (width==0) || (height==0) || (channels==0) || (bitsperpixel==0) ) { fprintf(stderr,"saveRawImageToFile(%s) called with zero dimensions\n",filename); return 0;} if(pixels==0) { fprintf(stderr,"saveRawImageToFile(%s) called for an unallocated (empty) frame , will not write any file output\n",filename); return 0; } if (bitsperpixel>16) { fprintf(stderr,"PNM does not support more than 2 bytes per pixel..!\n"); return 0; } FILE *fd=0; fd = fopen(filename,"wb"); if (fd!=0) { unsigned int n; if (channels==3) fprintf(fd, "P6\n"); else if (channels==1) fprintf(fd, "P5\n"); else { fprintf(stderr,"Invalid channels arg (%u) for SaveRawImageToFile\n",channels); fclose(fd); return 1; } char output[256]={0}; /*GetDateString(output,"TIMESTAMP",1,0,0,0,0,0,0,0); fprintf(fd, "#%s\n", output );*/ fprintf(fd, "#TIMESTAMP %u\n",GetTickCount()); fprintf(fd, "%d %d\n%u\n", width, height , simplePow(2 ,bitsperpixel)-1); float tmp_n = (float) bitsperpixel/ 8; tmp_n = tmp_n * width * height * channels ; n = (unsigned int) tmp_n; fwrite(pixels, 1 , n , fd); fflush(fd); fclose(fd); return 1; } else { fprintf(stderr,"SaveRawImageToFile could not open output file %s\n",filename); return 0; } return 0; }
int saveRawImageToFileOGLR(char * filename,void * pixels , unsigned int width , unsigned int height , unsigned int channels , unsigned int bitsperchannel) { if(pixels==0) { fprintf(stderr,"saveRawImageToFileOGLR(%s) called for an unallocated (empty) frame , will not write any file output\n",filename); return 0; } FILE *fd=0; fd = fopen(filename,"wb"); #if USE_REGULAR_BYTEORDER_FOR_PNM //Want Conformance to the NETPBM spec http://en.wikipedia.org/wiki/Netpbm_format#16-bit_extensions if (bitsperchannel==16) { _ogl_swapEndiannessPNM(pixels , width , height , channels , bitsperchannel); } #else #warning "We are using Our Local Byte Order for saving files , this makes things fast but is incompatible with other PNM loaders" #endif // USE_REGULAR_BYTEORDER_FOR_PNM if (bitsperchannel>16) fprintf(stderr,"PNM does not support more than 2 bytes per pixel..!\n"); if (fd!=0) { unsigned int n; if (channels==3) fprintf(fd, "P6\n"); else if (channels==1) fprintf(fd, "P5\n"); else { fprintf(stderr,"Invalid channels arg (%u) for SaveRawImageToFile\n",channels); fclose(fd); return 1; } fprintf(fd, "%d %d\n%u\n", width, height , simplePow(2 ,bitsperchannel)-1); float tmp_n = (float) bitsperchannel/ 8; tmp_n = tmp_n * width * height * channels ; n = (unsigned int) tmp_n; fwrite(pixels, 1 , n , fd); fwrite(pixels, 1 , n , fd); fflush(fd); fclose(fd); return 1; } else { fprintf(stderr,"SaveRawImageToFile could not open output file %s\n",filename); return 0; } return 0; }
int WritePPM(char * filename,struct Image * pic) { //fprintf(stderr,"saveRawImageToFile(%s) called\n",filename); if (pic==0) { return 0; } if ( (pic->width==0) || (pic->height==0) || (pic->channels==0) || (pic->bitsperpixel==0) ) { fprintf(stderr,"saveRawImageToFile(%s) called with zero dimensions ( %ux%u %u channels %u bpp\n",filename,pic->width , pic->height,pic->channels,pic->bitsperpixel); return 0; } if(pic->pixels==0) { fprintf(stderr,"saveRawImageToFile(%s) called for an unallocated (empty) frame , will not write any file output\n",filename); return 0; } if (pic->bitsperpixel>16) { fprintf(stderr,"PNM does not support more than 2 bytes per pixel..!\n"); return 0; } FILE *fd=0; fd = fopen(filename,"wb"); if (fd!=0) { unsigned int n; if (pic->channels==3) fprintf(fd, "P6\n"); else if (pic->channels==1) fprintf(fd, "P5\n"); else { fprintf(stderr,"Invalid channels arg (%u) for SaveRawImageToFile\n",pic->channels); fclose(fd); return 1; } fprintf(fd, "%d %d\n%u\n", pic->width, pic->height , simplePow(2 ,pic->bitsperpixel)-1); float tmp_n = (float) pic->bitsperpixel/ 8; tmp_n = tmp_n * pic->width * pic->height * pic->channels ; n = (unsigned int) tmp_n; fwrite(pic->pixels, 1 , n , fd); fflush(fd); fclose(fd); return 1; } else { fprintf(stderr,"SaveRawImageToFile could not open output file %s\n",filename); return 0; } return 0; }
int saveMuxImageToFile(char * filename,unsigned char * pixels , unsigned int width , unsigned int height , unsigned int channels , unsigned int bitsperpixel) { char filenameFull[2048]={0}; sprintf(filenameFull,"%s.pnm",filename); if(pixels==0) { fprintf(stderr,"saveMuxImageToFile(%s) called for an unallocated (empty) frame , will not write any file output\n",filename); return 0; } if (bitsperpixel>16) { fprintf(stderr,"PNM does not support more than 2 bytes per pixel..!\n"); return 0; } FILE *fd=0; fd = fopen(filenameFull,"wb"); if (fd!=0) { unsigned int n; if (channels==3) fprintf(fd, "P6\n"); else if (channels==1) fprintf(fd, "P5\n"); else { fprintf(stderr,"Invalid channels arg (%u) for SaveRawImageToFile\n",channels); fclose(fd); return 1; } fprintf(fd, "%d %d\n%u\n", width, height , simplePow(2 ,bitsperpixel)-1); float tmp_n = (float) bitsperpixel/ 8; tmp_n = tmp_n * width * height * channels ; n = (unsigned int) tmp_n; fwrite(pixels, 1 , n , fd); //fwrite(pixels, 1 , n , fd); fflush(fd); fclose(fd); return 1; } else { fprintf(stderr,"SaveRawImageToFile could not open output file %s\n",filename); return 0; } return 0; }
unsigned int acquisitionCopyDepthFramePPM(ModuleIdentifier moduleID,DeviceIdentifier devID,short * mem,unsigned int memlength) { printCall(moduleID,devID,"acquisitionCopyDepthFramePPM", __FILE__, __LINE__); if ( (mem==0) || (memlength==0) ) { fprintf(stderr,RED "acquisitionCopyDepthFramePPM called with incorrect target for memcpy , %u bytes size" NORMAL,memlength); return 0; } short * depth = acquisitionGetDepthFrame(moduleID,devID); if (depth==0) { return 0; } unsigned int width , height , channels , bitsperpixel; acquisitionGetDepthFrameDimensions(moduleID,devID,&width,&height,&channels,&bitsperpixel); sprintf((char*) mem, "P5%d %d\n%u\n", width, height , simplePow(2 ,bitsperpixel)-1); unsigned int payloadStart = strlen((char*) mem); short * memPayload = mem + payloadStart ; memcpy(memPayload,depth,width*height*channels*(bitsperpixel/8)); payloadStart += width*height*channels*(bitsperpixel/8); return payloadStart; }