筆頭。。
          實踐啟示
          posts - 14,comments - 3,trackbacks - 0
          <2008年1月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

              通過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)進行縱向以及橫向翻轉,描繪翻轉圖片的左上角位置為負向實現  回復  更多評論
            
          主站蜘蛛池模板: 邛崃市| 科技| 唐海县| 夏邑县| 博白县| 通河县| 怀化市| 巫溪县| 年辖:市辖区| 嘉祥县| 惠东县| 丘北县| 英吉沙县| 乌审旗| 右玉县| 石泉县| 弥渡县| 永胜县| 九龙坡区| 东乡县| 平湖市| 灵武市| 蓬安县| 黄浦区| 永兴县| 紫云| 南通市| 毕节市| 双辽市| 盐亭县| 东光县| 卢氏县| 镇原县| 北宁市| 普宁市| 虞城县| 华容县| 水城县| 马尔康县| 瓮安县| 桃源县|