blob: 396b30c92a9dd6ebc5fb74665e11e7a44e460a37 [file] [log] [blame]
import '../image.dart';
import '../draw/draw_pixel.dart';
/// Copies a rectangular portion of one image to another image. [dst] is the
/// destination image, [src] is the source image identifier.
///
/// In other words, copyInto will take an rectangular area from src of
/// width [src_w] and height [src_h] at position ([src_x],[src_y]) and place it
/// in a rectangular area of [dst] of width [dst_w] and height [dst_h] at
/// position ([dst_x],[dst_y]).
///
/// If the source and destination coordinates and width and heights differ,
/// appropriate stretching or shrinking of the image fragment will be performed.
/// The coordinates refer to the upper left corner. This function can be used to
/// copy regions within the same image (if [dst] is the same as [src])
/// but if the regions overlap the results will be unpredictable.
Image copyInto(Image dst, Image src,
{int dstX,
int dstY,
int srcX,
int srcY,
int srcW,
int srcH,
bool blend = true}) {
if (dstX == null) {
dstX = 0;
}
if (dstY == null) {
dstY = 0;
}
if (srcX == null) {
srcX = 0;
}
if (srcY == null) {
srcY = 0;
}
if (srcW == null) {
srcW = src.width;
}
if (srcH == null) {
srcH = src.height;
}
for (int y = 0; y < srcH; ++y) {
for (int x = 0; x < srcW; ++x) {
if (blend) {
drawPixel(dst, dstX + x, dstY + y, src.getPixel(srcX + x, srcY + y));
} else {
dst.setPixel(dstX + x, dstY + y, src.getPixel(srcX + x, srcY + y));
}
}
}
return dst;
}