筆頭。。
          實踐啟示
          posts - 14,comments - 3,trackbacks - 0
              通過java2D實現沿著圖片的某一邊進行翻轉,如沿著左邊、下邊、上邊、右邊翻轉圖像,獲得原始圖像以及翻轉圖像在一張圖片上的新圖片。
              scale的 AffineTransform矩陣為[sx,0,0],可見scale是對原圖片的(x,y)像素的點進行相乘處理(sx*x,sy*y).
                                           [0,sy,0]
                                           [0,0,1]
              對于翻轉圖片來說,如果橫向翻轉,那么將scale的參數設為(-1,1),縱向翻轉將參數設為(1,-1)
              scale()方法對于很多熟悉java2d的人經常用來進行放大縮小描繪處理,但是scale
              以圖像沿著下邊翻轉為例
              BufferedImage imageTmp=null;
              
          int imageWidth=image.getWidth(null);
              
          int imageHeight=image.getHeight(null);
            
              Graphics2D g2
          =(Graphics2D)imageTmp.createGraphics();

              g2.drawImage(image,
          0,0,null);
              
          //翻轉描繪,以下邊為準
              g2.scale(1.0-1.0);
              g2.drawImage(image, 
          0-2*imageHeight, null);
              g2.scale(
          1.0,-1.0);
              g2.dispose();
              其中scale()方法中傳入(1,-1)是以圖片中的(x,y)映射為(x,-y)進行描繪,描繪的翻轉圖片的左上角的位置為(0,-2*imageHeight)
              對于其他邊的翻轉,算法基本相同,注意倆點
          1. 新圖片的尺寸
          2. scale中傳入的參數
              源碼
           1 import java.awt.Graphics2D;
           2 import java.awt.Image;
           3 import java.awt.image.BufferedImage;
           4 
           5 /**
           6  * <p><code>OverTurnImages</code>,提供可以沿著Image的某個邊進行翻轉的方法
           7  * </p>
           8  * 
           9  * @author 如果有一天de
          10  *
          11  */
          12 public class OverTurnImage {
          13     /**
          14      * <p>翻轉類型:原始image</p>
          15      */
          16     public static final int orign=0;
          17     /**
          18      * <p>矩形左側邊翻轉</p>
          19      */
          20     public static final int LeftEdgeTurn=1;
          21     /**
          22      * <p>矩形右側邊翻轉</p>
          23      */
          24     public static final int RightEdgeTurn=2;
          25     /**
          26      * <p>矩形上邊翻轉</p>
          27      */
          28     public static final int UpperEdgeTurn=3;
          29     /**
          30      * <p>矩形下邊翻轉</p>
          31      */
          32     public static final int DownEdgeTurn=4;
          33     /**
          34      * <p>生成翻轉的圖片,同時保存原圖片</p>
          35      * 
          36      * @param image 原始圖片
          37      * @param turnFlag 翻轉類型
          38      * @return Image 翻轉后的圖片
          39      */
          40     public static BufferedImage createTurnImage(BufferedImage image,int turnFlag)
          41     {
          42         BufferedImage imageTmp=null;
          43         int imageWidth=image.getWidth(null);
          44         int imageHeight=image.getHeight(null);
          45         
          46         
          47         if(turnFlag==1||turnFlag==2)
          48         {
          49             imageTmp=new BufferedImage(imageWidth*2,imageHeight,BufferedImage.TYPE_INT_ARGB);
          50         }else if(turnFlag==3||turnFlag==4)
          51         {
          52             imageTmp=new BufferedImage(imageWidth,imageHeight*2,BufferedImage.TYPE_INT_ARGB);
          53         }else{
          54             return image;
          55         }
          56         Graphics2D g2=(Graphics2D)imageTmp.createGraphics();
          57         if(turnFlag==1)
          58         {
          59             g2.drawImage(image,imageWidth,0,null);
          60             g2.scale(-1.01.0);
          61             g2.drawImage(image, -imageWidth, 0null);
          62             g2.scale(-1.0,1.0);
          63             g2.dispose();
          64         }
          65         if(turnFlag==2)
          66         {
          67             g2.drawImage(image,0,0,null);
          68             g2.scale(-1.01.0);
          69             g2.drawImage(image, -2*imageWidth, 0null);
          70             g2.scale(-1.0,1.0);
          71             g2.dispose();
          72         }
          73         if(turnFlag==3)
          74         {
          75             g2.drawImage(image, 0, imageHeight,null);
          76             g2.scale(1.0-1.0);
          77             g2.drawImage(image, 0-imageHeight, null);
          78             g2.scale(1.0,-1.0);
          79             g2.dispose();
          80         }
          81         if(turnFlag==4)
          82         {
          83             g2.drawImage(image,0,0,null);
          84             g2.scale(1.0-1.0);
          85             g2.drawImage(image, 0-2*imageHeight, null);
          86             g2.scale(1.0,-1.0);
          87             g2.dispose();
          88         }
          89         
          90         
          91         return imageTmp;
          92     }
          93 
          94 }
          posted on 2008-01-21 17:35 如果有一天de 閱讀(2885) 評論(2)  編輯  收藏 所屬分類: richclient

          FeedBack:
          # re: 用java2D的scale實現圖片翻轉
          2008-01-22 08:20 | Matthew Chen
          底層是仿射變換來實現的嗎?  回復  更多評論
            
          # re: 用java2D的scale實現圖片翻轉
          2008-01-22 08:54 | 如果有一天de
          @Matthew Chen
          是通過仿射變換實現的,用了已經提供的方法scale(),通過傳入scale的參數為(1,-1)或(-1,1)進行縱向以及橫向翻轉,描繪翻轉圖片的左上角位置為負向實現  回復  更多評論
            
          主站蜘蛛池模板: 云霄县| 淮北市| 饶河县| 平潭县| 凤城市| 九龙县| 探索| 宁安市| 淮南市| 淮阳县| 武胜县| 商南县| 古浪县| 武威市| 江安县| 兰州市| 株洲市| 海安县| 兰溪市| 大港区| 巴青县| 会理县| 砀山县| 屏东县| 米林县| 高邮市| 云林县| 即墨市| 南和县| 仁怀市| 法库县| 湘阴县| 图木舒克市| 莫力| 花垣县| 镇坪县| 平山县| 濉溪县| 三明市| 潢川县| 重庆市|