blob: 1c9be858047c4ab7968292c8b2e08721cb1edd85 [file] [log] [blame]
import '../image.dart';
/// Flip the image horizontally.
const int FLIP_HORIZONTAL = 1;
/// Flip the image vertically.
const int FLIP_VERTICAL = 2;
/// Flip the image both horizontally and vertically.
const int FLIP_BOTH = 3;
/// Flips the [src] image using the given [mode], which can be one of:
/// [FLIP_HORIZONTAL], [FLIP_VERTICAL], or [FLIP_BOTH].
Image flip(Image src, int mode) {
if (mode < 1 || mode > 3) {
return src;
}
switch (mode) {
case FLIP_HORIZONTAL:
flipHorizontal(src);
break;
case FLIP_VERTICAL:
flipVertical(src);
break;
case FLIP_BOTH:
flipVertical(src);
flipHorizontal(src);
break;
}
return src;
}
/// Flip the [src] image vertically.
Image flipVertical(Image src) {
int w = src.width;
int h = src.height;
int h2 = h ~/ 2;
for (int y = 0; y < h2; ++y) {
int y1 = y * w;
int y2 = (h - 1 - y) * w;
for (int x = 0; x < w; ++x) {
int t = src[y2 + x];
src[y2 + x] = src[y1 + x];
src[y1 + x] = t;
}
}
return src;
}
/// Flip the src image horizontally.
Image flipHorizontal(Image src) {
int w = src.width;
int h = src.height;
int w2 = src.width ~/ 2;
for (int y = 0; y < h; ++y) {
int y1 = y * w;
for (int x = 0; x < w2; ++x) {
int x2 = (w - 1 - x);
int t = src[y1 + x2];
src[y1 + x2] = src[y1 + x];
src[y1 + x] = t;
}
}
return src;
}