笔头。。
实践启示
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 阅读(2870) 评论(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)进行纵向以及横向翻转,描绘翻转图片的左上角位置为负向实现  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: