我想要旋转图像,在下一级别我想要调整它的大小 帮我。 我创建一个从JPanel扩展并覆盖paintComponent()方法的类 用于绘制图像。
public class NewJPanel extends javax.swing.JPanel {
/** Creates new form NewJPanel */
public NewJPanel() {
initComponents();
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawImage(image, 20, 20, this);
}
答案 0 :(得分:3)
这是我使用的一些代码。您可以根据自己的需要进行修改。
调整图片大小:
/**
* Resizes the image
* @param filePath File path to the image to resize
* @param w Width of the image
* @param h Height of the image
* @return A resized image
*/
public ImageIcon resizeImage(String filePath, int w, int h) {
String data = filePath;
BufferedImage bsrc, bdest;
ImageIcon theIcon;
//scale the image
try
{
if(dataSource == DataTypeEnum.file)
{
bsrc = ImageIO.read(new File(data));
}
else
{
bsrc = ImageIO.read(new URL(filePath));
}
bdest = new BufferedImage(w, h, BufferedImage.TYPE_INT_RGB);
Graphics2D g = bdest.createGraphics();
AffineTransform at = AffineTransform.getScaleInstance((double) w / bsrc.getWidth(),
(double) h / bsrc.getHeight());
g.drawRenderedImage(bsrc, at);
//add the scaled image
theIcon = new ImageIcon(bdest);
return theIcon;
}
catch (Exception e)
{
Window.getLogger().warning("This image can not be resized. Please check the path and type of file.");
//restore the old background
return null;
}
}
旋转图像:
注意:角度为弧度
public static BufferedImage rotate(BufferedImage image, double angle) {
double sin = Math.abs(Math.sin(angle)), cos = Math.abs(Math.cos(angle));
int w = image.getWidth(), h = image.getHeight();
int neww = (int)Math.floor(w*cos+h*sin), newh = (int)Math.floor(h*cos+w*sin);
GraphicsConfiguration gc = getDefaultConfiguration();
BufferedImage result = gc.createCompatibleImage(neww, newh, Transparency.TRANSLUCENT);
Graphics2D g = result.createGraphics();
g.translate((neww-w)/2, (newh-h)/2);
g.rotate(angle, w/2, h/2);
g.drawRenderedImage(image, null);
g.dispose();
return result;
}
答案 1 :(得分:0)
没有提供完整的解决方案
Graphics2D有rotate和scale个功能。
答案 2 :(得分:-1)
使用BufferedImage类
BufferedImage newImg = new BufferedImage(newWidth,newHeight,imageType); newImg.createGraphics()。drawImage(oldImg,0,0,newWidth,newHeight,0,0,oldWidth,oldHeight,null);
然后只使用newImg而不是旧图像进行重绘,应该可行,我现在不在编译器附近进行测试。