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

              g2.drawImage(image,
          0,0,null);
              
          //翻轉(zhuǎn)描繪,以下邊為準(zhǔn)
              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)進(jìn)行描繪,描繪的翻轉(zhuǎn)圖片的左上角的位置為(0,-2*imageHeight)
              對于其他邊的翻轉(zhuǎn),算法基本相同,注意倆點
          1. 新圖片的尺寸
          2. scale中傳入的參數(shù)
              源碼
           1 import java.awt.Graphics2D;
           2 import java.awt.Image;
           3 import java.awt.image.BufferedImage;
           4 
           5 /**
           6  * <p><code>OverTurnImages</code>,提供可以沿著Image的某個邊進(jìn)行翻轉(zhuǎn)的方法
           7  * </p>
           8  * 
           9  * @author 如果有一天de
          10  *
          11  */
          12 public class OverTurnImage {
          13     /**
          14      * <p>翻轉(zhuǎn)類型:原始image</p>
          15      */
          16     public static final int orign=0;
          17     /**
          18      * <p>矩形左側(cè)邊翻轉(zhuǎn)</p>
          19      */
          20     public static final int LeftEdgeTurn=1;
          21     /**
          22      * <p>矩形右側(cè)邊翻轉(zhuǎn)</p>
          23      */
          24     public static final int RightEdgeTurn=2;
          25     /**
          26      * <p>矩形上邊翻轉(zhuǎn)</p>
          27      */
          28     public static final int UpperEdgeTurn=3;
          29     /**
          30      * <p>矩形下邊翻轉(zhuǎn)</p>
          31      */
          32     public static final int DownEdgeTurn=4;
          33     /**
          34      * <p>生成翻轉(zhuǎn)的圖片,同時保存原圖片</p>
          35      * 
          36      * @param image 原始圖片
          37      * @param turnFlag 翻轉(zhuǎn)類型
          38      * @return Image 翻轉(zhuǎn)后的圖片
          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 閱讀(2891) 評論(2)  編輯  收藏 所屬分類: richclient

          FeedBack:
          # re: 用java2D的scale實現(xiàn)圖片翻轉(zhuǎn)
          2008-01-22 08:20 | Matthew Chen
          底層是仿射變換來實現(xiàn)的嗎?  回復(fù)  更多評論
            
          # re: 用java2D的scale實現(xiàn)圖片翻轉(zhuǎn)
          2008-01-22 08:54 | 如果有一天de
          @Matthew Chen
          是通過仿射變換實現(xiàn)的,用了已經(jīng)提供的方法scale(),通過傳入scale的參數(shù)為(1,-1)或(-1,1)進(jìn)行縱向以及橫向翻轉(zhuǎn),描繪翻轉(zhuǎn)圖片的左上角位置為負(fù)向?qū)崿F(xiàn)  回復(fù)  更多評論
            
          主站蜘蛛池模板: 郴州市| 浏阳市| 富民县| 射阳县| 赤城县| 临沧市| 田阳县| 霍州市| 兰西县| 南召县| 韩城市| 陇西县| 中西区| 肥乡县| 广东省| 美姑县| 平利县| 临高县| 东兰县| 平南县| 安宁市| 莱阳市| 利辛县| 洮南市| 麻阳| 犍为县| 呼伦贝尔市| 理塘县| 徐汇区| 沙河市| 东明县| 新竹市| 乡城县| 黎城县| 咸阳市| 青海省| 苏尼特右旗| 田阳县| 师宗县| 贵南县| 灵台县|