int YARPImageFile::Read(const char *src, YARPGenericImage& dest, int format) { if (format!=YARPImageFile::FORMAT_NUMERIC) { return ImageRead(dest,src); } int hh = 0, ww = 0; { ifstream fin(src); int blank = 1; int curr = 0; while (!fin.eof()) { int ch = fin.get(); //if (ch!='\n') printf("[%c]",ch); if (ch==' ' || ch == '\t' || ch == '\r' || ch == '\n' || fin.eof()) { if (!blank) { if (curr==0) { hh++; } curr++; if (curr>ww) { ww = curr; //printf("%d\n", ww); } } blank = 1; if (ch=='\n') { curr = 0; } } else { blank = 0; } } } //printf("yyy dim %d %d\n", hh, ww); YARPImageOf<YarpPixelFloat> flt; flt.Resize(ww,hh); hh = 0; ww = 0; { char buf[256]; int idx = 0; ifstream fin(src); int blank = 1; int curr = 0; while (!fin.eof()) { int ch = fin.get(); if (ch==' ' || ch == '\t' || ch == '\r' || ch == '\n' || fin.eof()) { if (!blank) { if (curr==0) { hh++; } curr++; if (curr>ww) { ww = curr; } buf[idx] = '\0'; flt(curr-1,hh-1) = float(atof(buf)); idx = 0; } blank = 1; if (ch=='\n') { curr = 0; } } else { buf[idx] = ch; idx++; assert(idx<sizeof(buf)); blank = 0; } } } dest.CastCopy(flt); return 0; //return ImageRead(dest,src); //return 0; }
/// LATER: this is NOT tested. static int ImageRead(YARPGenericImage& img, const char *filename) { int width, height, color, num, size; FILE *fp = ACE_OS::fopen(filename, "rb"); if (!fp) //die("cannot open file for reading"); { warn("cannot open file for reading"); return -1; } if (ReadHeader(fp, &height, &width, &color) < 0) { ACE_OS::fclose (fp); return -1; } if (!color) // img.GetID()==YARP_PIXEL_RGB || img.GetID() == YARP_PIXEL_MONO) { // img.SetID(color?YARP_PIXEL_RGB:YARP_PIXEL_MONO); img.SetID(YARP_PIXEL_MONO); img.Resize(width,height); ///ACE_ASSERT(img.GetPadding() == 0); ACE_ASSERT(img.GetRawBuffer()!=NULL); const int w = img.GetWidth() * img.GetPixelSize(); const int h = img.GetHeight(); const int pad = img.GetPadding() + w; char *dst = img.GetRawBuffer (); size = w * h; num = 0; for (int i = 0; i < h; i++) { num += ACE_OS::fread((void *) dst, 1, (size_t) w, fp); dst += pad; } } else if (img.GetID()==YARP_PIXEL_RGB) { img.SetID(YARP_PIXEL_RGB); img.Resize(width,height); ///ACE_ASSERT(img.GetPadding() == 0); ACE_ASSERT(img.GetRawBuffer()!=NULL); const int w = img.GetWidth() * img.GetPixelSize(); const int h = img.GetHeight(); const int pad = img.GetPadding() + w; char *dst = img.GetRawBuffer (); size = w * h; num = 0; for (int i = 0; i < h; i++) { num += ACE_OS::fread((void *) dst, 1, (size_t) w, fp); dst += pad; } } else { // image is color, nothing was specified, assume BGR img.SetID(YARP_PIXEL_BGR); img.Resize(width,height); ///ACE_ASSERT(img.GetPadding() == 0); ACE_ASSERT(img.GetRawBuffer()!=NULL); const int w = img.GetWidth() * img.GetPixelSize(); const int h = img.GetHeight(); const int pad = img.GetPadding() + w; size = w * h; YARPImageOf<YarpPixelRGB> img2; img2.Resize (width,height); char *dst = img2.GetRawBuffer (); num = 0; for (int i = 0; i < h; i++) { num += ACE_OS::fread((void *) dst, 1, (size_t) w, fp); dst += pad; } img.CastCopy(img2); } if (num != size) { ACE_OS::printf ( "%d versus %d\n", num, size ); //die("cannot read image data from file"); warn("cannot read image data from file"); ACE_OS::fclose (fp); return -1; } ACE_OS::fclose(fp); return 0; }