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; | |
} |