java 图片合成 解决图片失真问题

源代码/**
   * 图二的位置 从左上角开始
   * @param x
   * @param y
   */
  public void createPicTwo(int x,int y)
  {
      try
      {
        //读取第一张图片
        File fileOne = new File("c:\\1.gif");
        BufferedImage ImageOne = ImageIO.read(fileOne);
        int width = ImageOne.getWidth();//图片宽度
        int height = ImageOne.getHeight();//图片高度
        //从图片中读取RGB
        int[] ImageArrayOne = new int[width*height];
        ImageArrayOne = ImageOne.getRGB(0,0,width,height,ImageArrayOne,0,width);
        //对第二张图片做相同的处理
        File fileTwo = new File("c:\\2.gif");
        BufferedImage ImageTwo = ImageIO.read(fileTwo);
        int widthTwo = ImageTwo.getWidth();//图片宽度
        int heightTwo = ImageTwo.getHeight();//图片高度
        int[] ImageArrayTwo = new int[widthTwo*heightTwo];
        ImageArrayTwo = ImageTwo.getRGB(0,0,widthTwo,heightTwo,ImageArrayTwo,0,widthTwo);
       
        //生成新图片
        BufferedImage ImageNew = new BufferedImage(width*2,height,BufferedImage.TYPE_INT_RGB);
        ImageNew.setRGB(0,0,width,height,ImageArrayOne,0,width);//设置左半部分的RGB
        ImageNew.setRGB(x,y,widthTwo,heightTwo,ImageArrayTwo,0,widthTwo);//设置右半部分的RGB
        File outFile = new File("c:\\out.png");
        ImageIO.write(ImageNew, "png", outFile);//写图片

      }
      catch(Exception e)
      {
        e.printStackTrace();
      }
  }



方法二:解决透明的问题

源代码/**
     *
     * @param filesrc
     * @param logosrc
     * @param outsrc
     * @param x 位置
     * @param y 位置
     */
  public void composePic(String filesrc,String logosrc,String outsrc,int x,int y) {
    try {
        File bgfile = new File(filesrc);
        Image bg_src = javax.imageio.ImageIO.read(bgfile);
       
        File logofile = new File(logosrc);
        Image logo_src = javax.imageio.ImageIO.read(logofile);
       
        int bg_width = bg_src.getWidth(null);
        int bg_height = bg_src.getHeight(null);
        int logo_width = logo_src.getWidth(null);;
        int logo_height = logo_src.getHeight(null);

        BufferedImage tag = new BufferedImage(bg_width, bg_height, BufferedImage.TYPE_INT_RGB);
       
        Graphics2D g2d = tag.createGraphics();
        g2d.drawImage(bg_src, 0, 0, bg_width, bg_height, null);
       
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP,1.0f)); //透明度设置开始 
        g2d.drawImage(logo_src,x,y,logo_width,logo_height, null);           
        g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER)); //透明度设置 结束
       
        FileOutputStream out = new FileOutputStream(outsrc);
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
        encoder.encode(tag);
        out.close();
    }catch (Exception e) {
        e.printStackTrace();
    }
  }

  public static void main(String args[]) {
      Long star = System.currentTimeMillis();
      TwoComposePic pic = new TwoComposePic();
      pic.composePic("c:\\bb.gif","c:\\bc.gif","c:\\out_pic.gif",490,360);
      Long end =System.currentTimeMillis();
      System.out.print("time====:"+(end-star));
  }




posted on 2008-04-24 10:42 .VwV. 阅读(847) 评论(0)  编辑  收藏


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


网站导航:
 
<2025年1月>
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜