AffineTransformOpで画像を反転する
Total: 12227
, Today: 1
, Yesterday: 2
Posted by aterai at
Last-modified:
概要
AffineTransformOp
などを使って、画像の上下反転、左右反転を行います。
Screenshot
Advertisement
サンプルコード
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);