概要

AffineTransformOpなどを使って、画像の上下反転、左右反転を行います。

サンプルコード

String path = "example/test.jpg";
ClassLoader cl = Thread.currentThread().getContextClassLoader();
BufferedImage img = Optional.ofNullable(cl.getResource(path)).map(url -> {
  try (InputStream s = url.openStream()) {
    return ImageIO.read(s);
  } catch (IOException ex) {
    return makeMissingImage();
  }
}).orElseGet(MainPanel::makeMissingImage);

// ...
int w = img.getWidth(this);
int h = img.getHeight(this);
AffineTransform at = AffineTransform.getScaleInstance(-1d, 1d);
at.translate(-w, 0);
// or:
// AffineTransform at = new AffineTransform(-1d, 0d, 0d, 1d, w, 0d);
AffineTransformOp atOp = new AffineTransformOp(at, null);
g.drawImage(atOp.filter(img, null), 0, 0, w, h, this);
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、AffineTransformOp#filter(...)メソッドを使用して左右反転したBufferedImageを生成しています。

  • 上下反転の場合:
    AffineTransform at = AffineTransform.getScaleInstance(1d, -1d);
    at.translate(0, -h);
    // or:
    // AffineTransform at = new AffineTransform(1d, 0d, 0d, -1d, 0d, h);
    g2.drawImage(img , at, this);
    

参考リンク

コメント