int YARPLogpolarSampler::Cartesian2Logpolar (const YARPGenericImage& in, YARPGenericImage& out) { using namespace _logpolarParams; ACE_ASSERT (in.GetWidth() == _xsize && in.GetHeight() == _ysize); ACE_ASSERT (out.GetWidth() == _stheta && out.GetHeight() == _srho); Make_LP_Real (_outimage, (unsigned char *)in.GetRawBuffer(), &_img, _cart2LP_Map); char *de = out.GetRawBuffer(); unsigned char * o = _outimage; char *cmap = _colormap; const int w = out.GetWidth(); const int h = out.GetHeight(); const int p = out.GetPadding(); int i, j; for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { *de++ = *(o + *cmap++); o += 3; } de += p; o += _padb; } return YARP_OK; }
/// 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; }