namespace X3DTK { template T *Memory::access(Image *I, unsigned short x, unsigned short y) { return (reinterpret_cast(I->getData()) + (I->getWidth()*y + x)); } template void ImageConverter::make(unsigned char *out, unsigned char *in, unsigned int length) { IT *iPtr = reinterpret_cast(in); OT *oPtr = reinterpret_cast(out); for (unsigned int i = 0; i < length; ++i) { double r; IT v = *iPtr; if (std::numeric_limits::is_integer) { r = static_cast(v)/static_cast(std::numeric_limits::max()); //if (std::numeric_limits::is_signed) // r = 0.5*r + 0.5; } else { r = v; if (r > 1.0) r = 1.0; if (r < 0.0) r = 0.0; } if (std::numeric_limits::is_integer) { //if (std::numeric_limits::is_signed) // r = 2.0*r - 1.0; *oPtr = static_cast(static_cast(std::numeric_limits::max())*r); } else *oPtr = static_cast(r); ++iPtr; ++oPtr; } } }