|
inlib
1.2.0
|
Functions | |
| bool | write_short (FILE *a_file, unsigned short a_val) |
| bool | write_file (FILE *a_file, unsigned char *a_buffer, unsigned int a_w, unsigned int a_h, unsigned int a_bpp) |
| bool | read_short (FILE *a_file, unsigned short &a_val) |
| unsigned char * | read_file (FILE *a_file, unsigned int &a_w, unsigned int &a_h, unsigned int &a_bpp) |
| bool | is (const std::string &a_file) |
| unsigned char * | read (std::ostream &a_out, const std::string &a_file, unsigned int &a_width, unsigned int &a_height, unsigned int &a_bpp) |
| bool | concatenate (std::ostream &a_out, const std::vector< std::string > &a_files, unsigned int a_cols, unsigned int a_rows, unsigned int a_bw, unsigned int a_bh, unsigned char a_bc, const std::string &a_file) |
| bool inlib::ivrgb::concatenate | ( | std::ostream & | a_out, |
| const std::vector< std::string > & | a_files, | ||
| unsigned int | a_cols, | ||
| unsigned int | a_rows, | ||
| unsigned int | a_bw, | ||
| unsigned int | a_bh, | ||
| unsigned char | a_bc, | ||
| const std::string & | a_file | ||
| ) | [inline] |
Definition at line 251 of file ivrgb.
{
unsigned int wa,ha,bppa;
unsigned char* ba =
image::concatenate(a_out,a_files,a_cols,a_rows,
a_bw,a_bh,a_bc,
read,wa,ha,bppa);
if(!ba) {
a_out << "inlib::ivrgb::concatenate :"
<< " failed to concatenate all files."
<< std::endl;
delete [] ba;
return false;
}
FILE* file = ::fopen(a_file.c_str(),"wb");
if(!file) {
a_out << "inlib::ivrgb::concatenate :"
<< " can't open " << file << " for writing."
<< std::endl;
delete [] ba;
return false;
}
#ifdef INLIB_IVRGB_DEBUG
::printf("debug : inlib::ivrgb::concatenate : %d %d\n",wa,ha);
#endif
if(!write_file(file,ba,wa,ha,bppa)) {
a_out << "inlib::ivrgb::concatenate :"
<< " can't write " << a_file
<< " w " << wa
<< " h " << ha
<< "."
<< std::endl;
delete [] ba;
::fclose(file);
return false;
}
delete [] ba;
::fclose(file);
return true;
}
| bool inlib::ivrgb::is | ( | const std::string & | a_file | ) | [inline] |
Definition at line 189 of file ivrgb.
{
FILE* file = ::fopen(a_file.c_str(),"rb");
if(!file) return false; //if file does not exist, then it is not a ivrgb !
unsigned short imagic;
if(!read_short(file,imagic)) {::fclose(file);return false;}
::fclose(file);
if(imagic!=0x01da) return false;
return true;
}
| unsigned char* inlib::ivrgb::read | ( | std::ostream & | a_out, |
| const std::string & | a_file, | ||
| unsigned int & | a_width, | ||
| unsigned int & | a_height, | ||
| unsigned int & | a_bpp | ||
| ) | [inline] |
Definition at line 199 of file ivrgb.
{
if(!is(a_file)) {
a_out << "inlib::ivrgb::read :"
<< " file " << a_file << " is not an inventor rgb image file."
<< std::endl;
a_width = 0;
a_height = 0;
a_bpp = 0;
return 0;
}
FILE* file = ::fopen(a_file.c_str(),"rb");
if(!file) {
a_out << "inlib::ivrgb::read :"
<< " can't open " << a_file
<< std::endl;
a_width = 0;
a_height = 0;
a_bpp = 0;
return 0;
}
unsigned int w,h,bpp;
unsigned char* buffer = read_file(file,w,h,bpp);
::fclose(file);
if(!buffer) {
a_out << "inlib::ivrgb::read :"
<< " problem reading " << a_file
<< std::endl;
a_width = 0;
a_height = 0;
a_bpp = 0;
return 0;
}
a_width = w;
a_height = h;
a_bpp = bpp;
return buffer;
}
| unsigned char* inlib::ivrgb::read_file | ( | FILE * | a_file, |
| unsigned int & | a_w, | ||
| unsigned int & | a_h, | ||
| unsigned int & | a_bpp | ||
| ) | [inline] |
Definition at line 92 of file ivrgb.
{
// the returned buffer must be delete with "delete []".
unsigned short imagic;
if(!read_short(a_file,imagic)) {a_w = a_h = 0;a_bpp=0;return 0;}
if(imagic!=0x01da) {
#ifdef INLIB_IVRGB_DEBUG
::printf("debug : inlib::ivrgb::read_file : bad magic\n");
#endif
a_w = a_h = 0;a_bpp=0;return 0;
}
unsigned short raw;
if(!read_short(a_file,raw)) {a_w = a_h = 0;a_bpp=0;return 0;}
if(raw!=0x0001) {
#ifdef INLIB_IVRGB_DEBUG
::printf("debug : inlib::ivrgb::read_file : bad raw\n");
#endif
a_w = a_h = 0;a_bpp=0;return 0;
}
unsigned short dim;
if(!read_short(a_file,dim)) {a_w = a_h = 0;a_bpp=0;return 0;}
//if((dim!=0x0002)&&(dim!=0x0003)) {a_w = a_h = 0;a_bpp=0;return 0;}
if(dim!=0x0003) {
#ifdef INLIB_IVRGB_DEBUG
::printf("debug : inlib::ivrgb::read_file : bad dim\n");
#endif
a_w = a_h = 0;a_bpp=0;return 0;
}
unsigned short w,h,nrcomponents;
if(!read_short(a_file,w)) {a_w = a_h = 0;a_bpp=0;return 0;}
if(!read_short(a_file,h)) {a_w = a_h = 0;a_bpp=0;return 0;}
if(!read_short(a_file,nrcomponents)) {a_w = a_h = 0;a_bpp=0;return 0;}
#ifdef INLIB_IVRGB_DEBUG
::printf("debug : inlib::ivrgb::read_file : w %d h %d nrc %d\n",
w,h,nrcomponents);
#endif
unsigned char buf[500];
if(::fread(buf,1,500,a_file)!=500) {
#ifdef INLIB_IVRGB_DEBUG
::printf("debug : inlib::ivrgb::read_file : read 500 header failed\n");
#endif
a_bpp = a_w = a_h = 0;
return 0;
}
unsigned char* b = new unsigned char[w*h*nrcomponents];
if(!b) {
#ifdef INLIB_IVRGB_DEBUG
::printf("debug : inlib::ivrgb::read_file : can't alloc mem %d\n",
w*h*nrcomponents);
#endif
a_bpp = a_w = a_h = 0;
return 0;
}
unsigned char* line = new unsigned char[w];
if(!line) {
delete [] b;
a_bpp = a_w = a_h = 0;
return 0;
}
for (unsigned int c = 0; c < nrcomponents; c++) {
for (unsigned int y = 0; y < h; y++) {
if(::fread(line,1,w,a_file)!=w) {
#ifdef INLIB_IVRGB_DEBUG
::printf("debug : inlib::ivrgb::read_file : read line %d %d failed.\n",y,c);
#endif
delete [] line;
delete [] b;
a_bpp = a_w = a_h = 0;
return 0;
}
for (unsigned int x = 0; x < w; x++) {
b[(x + y * w) * nrcomponents + c] = line[x];
}
}
}
delete [] line;
a_w = w;
a_h = h;
a_bpp = nrcomponents;
return b;
}
| bool inlib::ivrgb::read_short | ( | FILE * | a_file, |
| unsigned short & | a_val | ||
| ) | [inline] |
Definition at line 78 of file ivrgb.
{
unsigned char b[2];
if(::fread(b,2,1,a_file)!=1) {
#ifdef INLIB_IVRGB_DEBUG
::printf("debug : inlib::ivrgb::read_short : failed\n");
#endif
a_val = 0;return false;
}
a_val = b[1];
a_val += b[0] <<8;
//::printf("debug : read_short %d %x : %d %d\n",a_val,a_val,b[0],b[1]);
return true;
}
| bool inlib::ivrgb::write_file | ( | FILE * | a_file, |
| unsigned char * | a_buffer, | ||
| unsigned int | a_w, | ||
| unsigned int | a_h, | ||
| unsigned int | a_bpp | ||
| ) |
Definition at line 32 of file ivrgb.
{
if(!write_short(a_file,0x01da)) return false;
if(!write_short(a_file,0x0001)) return false;
unsigned int nrcomponents = a_bpp;
if(!write_short(a_file,0x0003)) return false;
if(!write_short(a_file,(unsigned short)a_w)) return false;
if(!write_short(a_file,(unsigned short)a_h)) return false;
if(!write_short(a_file,(unsigned short)nrcomponents)) return false;
unsigned char buf[500];
::memset(buf,0,500);
buf[7] = 255; // set maximum pixel value to 255
::strcpy((char*)buf+8,"http://www.coin3d.org");
if(::fwrite(buf,1,500,a_file)!=500) {
#ifdef INLIB_IVRGB_DEBUG
::printf("debug : inlib::ivrgb::write_file : write 500 failed\n");
#endif
return false;
}
unsigned char* line = new unsigned char[a_w];
for (unsigned int c = 0; c < nrcomponents; c++) {
for (unsigned int y = 0; y < a_h; y++) {
for (unsigned int x = 0; x < a_w; x++) {
line[x] = a_buffer[(x + y * a_w) * nrcomponents + c];
}
if(::fwrite(line,1,a_w,a_file)!=a_w) {
#ifdef INLIB_IVRGB_DEBUG
::printf("debug : inlib::ivrgb::write_file : write line %d %d failed.\n",y,c);
#endif
delete [] line;
return false;
}
}
}
delete [] line;
return true;
}
| bool inlib::ivrgb::write_short | ( | FILE * | a_file, |
| unsigned short | a_val | ||
| ) | [inline] |
1.7.5.1