使用Java合并两个图像的方法

阅读更多
BufferedImage是具有可访问图像数据缓冲区的Image。BufferedImage由图像数据的ColorModel和Raster组成。Raster的SampleModel中band的数量和类型必须与ColorModel所要求的数量和类型相匹配,以表示其颜色和alpha分量。所有BufferedImage对象的左上角坐标都为(0, 0)。因此,用来构造BufferedImage的任何Raster都必须满足minX=0且minY=0。



    ColorModel抽象类封装了将像素值转换为颜色分量(例如,红色、绿色和蓝色)和alpha分量的方法。为

了将图像呈现到屏幕、打字机或其他图像上,必须将像素值转换为颜色和alpha分量。



    Raster表示像素矩形数组的类。Raster封装了存储采样值的DataBuffer和描述如何在DataBuffer中定位给定采样值的SampleModel。Raster定义了占据特定平面矩形区域的像素值,该区域不一定包括(0, 0)。该矩形也称为Raster的边界矩形,并且可通过getBounds方法来获得,它由minX、minY、width和height值定义。minX和minY值定义了Raster左上角的坐标。对边界矩形外部像素的引用可能导致抛出异常,也可能导致引用与Raster相关联的DataBuffer无关的元素。用户应该避免访问这种像素。



参数说明:

    image1:图像一

    image2:图像二

    posw:  合并x坐标

    posh:  合并y坐标

    file:  目标文件



函数代码:

public static boolean Merge(BufferedImage image1, BufferedImage image2, int posw, int posh, File fileOutput) {

  //合并两个图像
  int w1 = image1.getWidth();
  int h1 = image1.getHeight();
  int w2 = image2.getWidth();
  int h2 = image2.getHeight();

  BufferedImage imageSaved = new BufferedImage(w1, h1, BufferedImage.TYPE_INT_ARGB);
  Graphics2D g2d = imageSaved.createGraphics();
  g2d.drawImage(image1, null, 0, 0);
  for (int i = 0; i < w2; i++) {
   for (int j = 0; j < h2; j++) {
    int _rgb1 = image1.getRGB(i + posw, j + posh);
    int _rgb2 = image2.getRGB(i, j);
    if (_rgb1 != _rgb2) {
     _rgb2 = _rgb1 & _rgb2;
    }
    imageSaved.setRGB(i + posw, j + posh, _rgb2);
   }
  }

  boolean b = false;
  try {
   b = ImageIO.write(imageSaved, "png", file);
  }
  catch (IOException ie) {
   ie.printStackTrace();
  }
  return b;
 }


测试通过使用。

你可能感兴趣的:(java,image,合并图像,图像,BufferedImage)