38 template <
class PixType>
inline
47 for (
int y = 0; y < h; ++y)
51 memcpy(dptr, sptr, w *
sizeof(PixType));
59 template <
class PixType>
inline
65 typename Image<PixType>::const_iterator sptr = src.
const_begin();
66 typename Image<PixType>::iterator dptr = result.
begin() + w - 1;
68 for (
int y = 0; y < h; ++y)
70 for (
int x = 0; x < w; ++x) *dptr-- = *sptr++;
78 template <NRT_PROMOTE_PIX_NO_DEFAULT>
83 if(srcImage.
size() == 0)
return srcImg;
91 int xt = (int)floor(dx);
92 float xfrac = dx - xt;
93 int startx = std::max(0,xt);
94 int endx = std::min(0,xt) + w;
95 if (fabs(xfrac) < 1.0e-10) xfrac = 0.0;
99 int yt = (int)floor(dy);
100 float yfrac = dy - yt;
101 int starty = std::max(0,yt);
102 int endy = std::min(0,yt) + h;
103 if (fabs(yfrac) < 1.0e-10) yfrac = 0.0;
107 if (fabs(xfrac) < 1.0e-10 && fabs(yfrac) < 1.0e-10)
123 float tl = (1.0 - xfrac) * (1.0 - yfrac);
124 float tr = xfrac * (1.0 - yfrac);
125 float bl = (1.0 - xfrac) * yfrac;
126 float br = xfrac * yfrac;
131 if (xt > 0) ret2 += xt;
132 if (xt < 0) src2 -= xt;
133 if (yt > 0) ret2 += yt * w;
134 if (yt < 0) src2 -= yt * w;
137 for (
int y = starty; y < endy; ++y)
139 src = src2; ret = ret2;
140 for (
int x = startx; x < endx; ++x)
142 (*ret) = (DestType)((*src) * tl);
143 if (tr > 0.0) (*ret) += (DestType)((*(src + 1)) * tr);
144 if (bl > 0.0) (*ret) += (DestType)((*(src + w)) * bl);
145 if (br > 0.0) (*ret) += (DestType)((*(src + w + 1)) * br);
148 src2 += w; ret2 += w;
154 template <
class PixType>
160 assert(srcImg.
size() > 0);
172 int startx = std::max(0, -dx), endx = std::min(w - 1, w - 1 - dx);
173 if (startx >= w || endx < 0)
return retImg;
174 int starty = std::max(0, -dy), endy = std::min(h - 1, h - 1 - dy);
175 if (starty >= h || endy < 0)
return retImg;
177 int dstx = std::max(0, std::min(w - 1, dx));
178 int dsty = std::max(0, std::min(h - 1, dy));
180 src += startx + starty * w;
181 dst += dstx + dsty * w;
183 int skip = w - endx + startx - 1;
186 for (
int j = starty; j <= endy; j ++)
188 for (
int i = startx; i <= endx; i ++) *dst++ = *src++;
191 src += skip; dst += skip;
198 template <NRT_PROMOTE_PIX_NO_DEFAULT>
213 int pad = int(ceil(sqrt(w * w + h * h)));
214 int wR = 2 * pad + w;
215 int hR = 2 * pad + h;
220 float cAng = cos(angRad), sAng = sin(angRad);
223 float xR = 0.0;
float yR = 0.0;
224 int const dx = pad + x;
225 int const dy = pad + y;
226 for(
int j = -y; j < h-y; j++)
227 for(
int i = -x; i < w-x; i++)
229 xR = dx + i*cAng + j*sAng;
230 yR = dy - i*sAng + j*cAng;
231 *rBPtr++ = DestType(tempImg.interpolate(xR,yR));
238 template <NRT_PROMOTE_PIX_NO_DEFAULT>