📄 imageprocessor.java
字号:
package onlyfun.caterpillar.image;
import java.awt.Image;
import java.awt.image.ImageObserver;
import java.awt.image.BufferedImage;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.RenderingHints;
public class ImageProcessor {
public Image copyRectImage(Image original, Rectangle2D rect, ImageObserver observer) {
int x = (int) rect.getX();
int y = (int) rect.getY();
int width = (int) rect.getWidth();
int height = (int) rect.getHeight();
return mirror(original, 0, 0, width, height, x, y, x + width, y + height, observer);
}
public Image resize(Image original, double percentage, ImageObserver observer) {
int width = (int) (original.getWidth(observer) * percentage);
int height = (int) (original.getHeight(observer) * percentage);
return resize(original, width, height, observer);
}
public Image resize(Image original, int width, int height, ImageObserver observer) {
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bufferedImage.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
RenderingHints.VALUE_INTERPOLATION_BILINEAR);
g2.drawImage(original, 0, 0, width, height, observer);
return bufferedImage;
}
public Image horizontalMirror(Image original, ImageObserver observer) {
int width = original.getWidth(observer);
int height = original.getHeight(observer);
return mirror(original, width, 0, 0, height, 0, 0, width, height, observer);
}
public Image verticalMirror(Image original, ImageObserver observer) {
int width = original.getWidth(observer);
int height = original.getHeight(observer);
return mirror(original, 0, height, width, 0, 0, 0, width, height, observer);
}
public Image clockwise(Image original, ImageObserver observer) {
return rotate90(original, true, observer);
}
public Image counterClockwise(Image original, ImageObserver observer) {
return rotate90(original, false, observer);
}
private Image mirror(Image original,
int dx1, int dy1, int dx2, int dy2,
int sx1, int sy1, int sx2, int sy2,
ImageObserver observer) {
int width = Math.abs(sx1 - sx2);
int height = Math.abs(sy1 - sy2);
BufferedImage bufferedImage = new BufferedImage(width,
height, BufferedImage.TYPE_INT_RGB);
Graphics g = bufferedImage.getGraphics();
g.drawImage(original, dx1, dy1, dx2, dy2,
sx1, sy1, sx2, sy2, observer);
return bufferedImage;
}
private Image rotate90(Image original, boolean clockwise, ImageObserver observer) {
int width = original.getWidth(observer);
int height = original.getHeight(observer);
BufferedImage bufferedImage = new BufferedImage(height,
width, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bufferedImage.createGraphics();
if(clockwise) {
AffineTransform aff = AffineTransform.getRotateInstance(Math.toRadians(90), 0, 0);
g2.setTransform(aff);
g2.drawImage(original, 0, -height , observer);
}
else {
AffineTransform aff = AffineTransform.getRotateInstance(Math.toRadians(-90), 0, 0);
g2.setTransform(aff);
g2.drawImage(original, -width, 0, observer);
}
return bufferedImage;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -