Swing/AffineTransformOp の変更点
- 追加された行はこの色です。
- 削除された行はこの色です。
- Swing/AffineTransformOp へ行く。
- Swing/AffineTransformOp の差分を削除
--- category: swing folder: AffineTransformOp title: AffineTransformOpで画像を反転する tags: [AffineTransformOp, BufferedImage, AffineTransform] author: aterai pubdate: 2010-01-11T23:59:17+09:00 description: AffineTransformOpなどを使って、画像の上下反転、左右反転を行います。 image: https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTHczsN2NI/AAAAAAAAARM/D8gpa0-KfEI/s800/AffineTransformOp.png --- * 概要 [#summary] `AffineTransformOp`などを使って、画像の上下反転、左右反転を行います。 #download(https://lh5.googleusercontent.com/_9Z4BYR88imo/TQTHczsN2NI/AAAAAAAAARM/D8gpa0-KfEI/s800/AffineTransformOp.png) * サンプルコード [#sourcecode] #code(link){{ 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); }} * 解説 [#explanation] 上記のサンプルでは、`AffineTransformOp#filter(...)`メソッドを使用して左右反転した`BufferedImage`を生成しています。 - 上下反転の場合: #code{{ 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); }} * 参考リンク [#reference] - [https://docs.oracle.com/javase/jp/8/docs/api/java/awt/geom/AffineTransform.html#getScaleInstance-double-double- AffineTransform#getScaleInstance(...) (Java Platform SE 8)] - [[Shapeの反転>Swing/HorizontalFlip]] * コメント [#comment] #comment #comment