通過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)
對于其他邊的翻轉,算法基本相同,注意倆點
- 新圖片的尺寸
- 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.0, 1.0);
61 g2.drawImage(image, -imageWidth, 0, null);
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.0, 1.0);
69 g2.drawImage(image, -2*imageWidth, 0, null);
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 閱讀(2882)
評論(2) 編輯 收藏 所屬分類:
richclient