通過(guò)java2D實(shí)現(xiàn)沿著圖片的某一邊進(jìn)行翻轉(zhuǎn),如沿著左邊、下邊、上邊、右邊翻轉(zhuǎn)圖像,獲得原始圖像以及翻轉(zhuǎn)圖像在一張圖片上的新圖片。
scale的 AffineTransform矩陣為[sx,0,0],可見(jiàn)scale是對(duì)原圖片的(x,y)像素的點(diǎn)進(jìn)行相乘處理(sx*x,sy*y).
[0,sy,0]
[0,0,1]
對(duì)于翻轉(zhuǎn)圖片來(lái)說(shuō),如果橫向翻轉(zhuǎn),那么將scale的參數(shù)設(shè)為(-1,1),縱向翻轉(zhuǎn)將參數(shù)設(shè)為(1,-1)
scale()方法對(duì)于很多熟悉java2d的人經(jīng)常用來(lái)進(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)
對(duì)于其他邊的翻轉(zhuǎn),算法基本相同,注意倆點(diǎn)
- 新圖片的尺寸
- 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的某個(gè)邊進(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)的圖片,同時(shí)保存原圖片</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.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 閱讀(2884)
評(píng)論(2) 編輯 收藏 所屬分類:
richclient