static @NotNull BufferedImageFilter flipFilter(boolean flipV, boolean flipH) {
      return new BufferedImageFilter(new BufferedImageOp() {
        @Override
        public BufferedImage filter(BufferedImage src, BufferedImage dest) {
          AffineTransform tx = AffineTransform.getScaleInstance(flipH ? -1 : 1, flipV ? -1 : 1);
          tx.translate(flipH ? -src.getWidth(null) : 0, flipV ? -src.getHeight(null) : 0);
          AffineTransformOp op = new AffineTransformOp(tx, AffineTransformOp.TYPE_NEAREST_NEIGHBOR);
          return op.filter(src, dest);
        }

        @Override
        public Rectangle2D getBounds2D(BufferedImage src) { return null;}

        @Override
        public BufferedImage createCompatibleDestImage(BufferedImage src, ColorModel destCM) { return null;}

        @Override
        public Point2D getPoint2D(Point2D srcPt, Point2D dstPt) { return null;}

        @Override
        public RenderingHints getRenderingHints() { return null;}
      });
    }
static @NotNull BufferedImageFilter flipFilter(boolean flipV, boolean flipH)