blob: ecf24d8e6b2f481e9a33980943ce35193914cdbc [file] [log] [blame]
import '../image.dart';
import '../util/point.dart';
/// Returns a copy of the [src] image, where the given rectangle
/// has been mapped to the full image.
Image copyRectify(Image src, {Point topLeft, Point topRight, Point bottomLeft,
Point bottomRight, Image toImage}) {
Image dst = toImage == null ? Image.from(src) : toImage;
for (int y = 0; y < dst.height; ++y) {
double v = y / (dst.height - 1);
for (int x = 0; x < dst.width; ++x) {
double u = x / (dst.width - 1);
// bilinear interpolation
Point srcPixelCoord = topLeft * (1 - u) * (1 - v) +
topRight * (u) * (1 - v) +
bottomLeft * (1 - u) * (v) +
bottomRight * (u) * (v);
var srcPixel = src.getPixel(srcPixelCoord.xi, srcPixelCoord.yi);
dst.setPixel(x, y, srcPixel);
}
}
return dst;
}