JAVA中如何将图片在不做成控件的情况下旋转一个角度?

解决方案 »

  1. java.awt.image.RasterOp
    java图像变换类,可以实现各种图形图像变化处理
      

  2. java.awt.image.RasterOp
     我刚才去了查一下,我再研究一下
      

  3.     /**            
         * 目标图像
         * @param degree
         *            旋转角度
         * @return
         */
        public static BufferedImage rotateImage(final BufferedImage bufferedimage,
                final int degree) ...{
            int w = bufferedimage.getWidth();
            int h = bufferedimage.getHeight();
            int type = bufferedimage.getColorModel().getTransparency();
            BufferedImage img;
            Graphics2D graphics2d;
            (graphics2d = (img = new BufferedImage(w, h, type))
                    .createGraphics()).setRenderingHint(
                    RenderingHints.KEY_INTERPOLATION,
                    RenderingHints.VALUE_INTERPOLATION_BILINEAR);
            graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2);
            graphics2d.drawImage(bufferedimage, 0, 0, null);
            graphics2d.dispose();
            return img;
        }
      

  4. java.awt.image.RasterOp 
    java图像变换类,可以实现各种图形图像变化处理 
      

  5. 修改了一下代码:
    package com.iwode.jason;import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import java.awt.image.BufferedImage;
    import java.io.File;import javax.imageio.ImageIO;/**
     * 
     * @author Jason
     * @version 创建时间:2008-11-4 下午12:59:17
     * @contact mailto:[email protected]
     * 
     */
    public class RotateImage {    /**
         * @param args
         */
        public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub
    BufferedImage bufferedimage = ImageIO.read(new File("close.gif"));
    BufferedImage img;
    int degree = 30;
    int w = bufferedimage.getWidth();
    int h = bufferedimage.getHeight();
    int type = BufferedImage.TYPE_INT_RGB;
    Graphics2D graphics2d;
    (graphics2d = (img = new BufferedImage(w, h, type)).createGraphics())
    .setRenderingHint(RenderingHints.KEY_INTERPOLATION,
    RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    graphics2d.rotate(Math.toRadians(degree), w / 2, h / 2);
    graphics2d.drawImage(bufferedimage, 0, 0, null);
    ImageIO.write(img, "gif", new File("close2.gif"));
    graphics2d.dispose();
        }}
      

  6. import java.applet.Applet;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Image;
    import java.awt.geom.AffineTransform;
    import java.awt.geom.Point2D;
    import java.awt.image.AffineTransformOp;
    import java.awt.image.BufferedImage;
    import java.awt.image.BufferedImageOp;
    public class TextRotate3 extends Applet
    {
    Graphics g;
    Image joe,joe1;
    AffineTransform affine;
    BufferedImage sourceBI;
    AffineTransform at;
    BufferedImage destinationBI = null;
    AffineTransform affine1;
    public void init()
    {
    joe = getImage(getDocumentBase(),"Tuo/4.png");
    joe1 = getImage(getDocumentBase(),"Tuo/5.png");
    }
    public void run()
    {

    }
    public void paint(Graphics g)
    {
    g.drawImage(joe1, 10,10, this);
    PaintOne(g,joe,35.0,30,30);
    PaintOne(g,joe,105.0,30,50);
    }
       public void PaintOne(Graphics g,Image j, double i,int x,int y) 
       {
       Graphics2D g2 = (Graphics2D)g;
    affine = g2.getTransform();
    g2.transform(affine);
    g2.rotate(i*Math.PI/180.0,y,x);
    g2.drawImage(j, affine, this);
    g2.setTransform(affine);
       }  

    void main()
       {
       init();
       paint(g);
       }
    }
      

  7. 楼上的jason,你的程序是用来改变我的源图片的,我只是想将画出的图片在给出的图片0度角的情况下能旋转任意角度并且图片要保证不失真,当然源图片不用改变角度。
      

  8. /**
     * 
     */
    package com.iwode.jason;import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.RenderingHints;
    import java.awt.image.BufferedImage;
    import java.io.File;
    import java.util.Random;import javax.imageio.ImageIO;
    import javax.swing.JApplet;/**
     * 
     * @author Jason
     * @version 创建时间:2008-11-8 上午09:09:23
     * @contact mailto:[email protected]
     * 
     */
    public class ImageApplet extends JApplet {    BufferedImage bufferedimage;    @Override
        public void init() {
    // TODO Auto-generated method stub
    super.init();
    try {
        this.bufferedimage = ImageIO.read(new File("D:\\close.gif"));
    } catch (Exception ex) {
        ex.printStackTrace();
    }
        }    public void paint(Graphics g) {
    rotatePic(g,10);
        }    public void rotatePic(Graphics g, int degree) {
    Graphics2D g2 = (Graphics2D) g;
    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
    RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g2.rotate(Math.toRadians(degree), 0, 0);
    g2.drawImage(bufferedimage, 125, 40, null);
        }}
    运行Applet就可以了,我试了10度,30度和60度,无什么问题。
      

  9. 我做的是仿照画图的图形化的工具。自然旋转是个事件,点击旋转按钮触发事件,调用whirlImage(ActionEvent e),结果原先显示图片的区域变成了空白。为什么我的不行呢?这是我截取的部分代码,应该是这里出错了,就是不知道哪里出错了,哎,调错的方法都不是很会,最郁闷的是这程序我写的可能有点太过细心了,闹的不报错,就是显示的不是我要的。雪地跪求,,,前辈们,,敬请赐教        // 操作状态
    private String status;
    // 旋转角度
    private int degree;
           //目标图片高,宽
    private int imgWidth;
    private int imgHeight;
    // 把图片画到JPanel上
    private class DrawImage extends JPanel {
    /**
     * 继承序列化数字,提示Java运行平台在调用或传输过程中对这个类中的数据进行特殊处理,以保证数据的完整性。
     */
    private static final long serialVersionUID = 1L; // 重写JPanel的方法paint(Graphics g),满足特殊需要。
    @Override
    public void paint(Graphics g) {
    Color c = g.getColor();
    if (status != null && !status.equals("") && status.equals("whirl")) {
    Graphics2D g2 = (Graphics2D) g;
    g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION,
    RenderingHints.VALUE_INTERPOLATION_BILINEAR);
    g2.rotate(Math.toRadians(degree), 0, 0);
    g2.drawImage(bufferedImage, 0, 0, null);

    imgHeight = bufferedImage.getHeight();
    imgWidth = bufferedImage.getWidth();
    } else {
    g.drawImage(bufferedImage, 0, 0, imgWidth, imgHeight, null);
    }
    g.setColor(c);
    }
    } public void whirlImage(ActionEvent e) { status = "whirl";
    degree = 90;
    /**
     * 构造一个 Dimension,并将其初始化为指定宽度和高度。 将组件的首选大小设置为常量值dimension(尺度,大小)
     */
    drawImage.setPreferredSize(new Dimension(imgWidth, imgHeight));
    this.add(drawImage, BorderLayout.CENTER);
    this.pack();
    }
      

aliyun

类似问题 »