你想怎么个合法?是两张图片并排合起来还是其中一张小的图片盖在大的图片上?
并排合好解决:用一个BufferedImage对象,宽设成两张图像的宽之和,高取大图的高。用Graphics g=image.getGraphics();得到Graphics对象,
再用g.drawImage把两张图片位置排一下画进去,flush()后编码保存就行了。
覆盖就更容易了:BufferedImage的大小和大图一样,然后和上面一样,记得先画大图再画小图,保存,OK!
不过你要想像Photoshop那样实现图像的融合就麻烦了,只好把像素取出来一个个分析,把两张图的像素做一定运算再写到文件里去,没做过!
说了一大通,不知道对你有没有帮助。
并排合好解决:用一个BufferedImage对象,宽设成两张图像的宽之和,高取大图的高。用Graphics g=image.getGraphics();得到Graphics对象,
再用g.drawImage把两张图片位置排一下画进去,flush()后编码保存就行了。
覆盖就更容易了:BufferedImage的大小和大图一样,然后和上面一样,记得先画大图再画小图,保存,OK!
不过你要想像Photoshop那样实现图像的融合就麻烦了,只好把像素取出来一个个分析,把两张图的像素做一定运算再写到文件里去,没做过!
说了一大通,不知道对你有没有帮助。
pb = new ParameterBlock();
pb.addSource(s1);
RenderedImage src1 = (RenderedImage)JAI.create("stream", pb); pb = new ParameterBlock();
pb.addSource(s2);
RenderedImage src2 = (RenderedImage)JAI.create("stream", pb); // Create the ParameterBlock for the operation
pb = new ParameterBlock();
pb.addSource(src1);
pb.addSource(src2); // Create the Add operation.
RenderedImage dst = (RenderedImage)JAI.create("add", pb);
一般图片的合成使用的是多图层和Alpha blending的技术,象photoshop。
我照着你的方法写的,运行的时候出错:
java.lang.IllegalArgumentException: operation "Stream" requires 2 parameter obje
ct(s).
代码如下:
OutputStream out = new BufferedOutputStream(new FileOutputStream ("g:\\ScreenShot.jpg")) ;
source = JAI.create("fileload", "1.bmp");
PlanarImage source2 = JAI.create("fileload", "tttt.png");
ParameterBlock pb = new ParameterBlock();
pb.addSource(source);
RenderedImage src1 = (RenderedImage)JAI.create("stream", pb);
pb = new ParameterBlock();
pb.addSource(source2);
RenderedImage src2 = (RenderedImage)JAI.create("stream", pb);
pb = new ParameterBlock();
pb.addSource(src1);
pb.addSource(src2);
RenderedImage dst = (RenderedImage)JAI.create("add", pb);
JAI.create("encode", dst, out,"PNG", null);
out.flush();
能给个连接嘛?找了半天,也没有找到!
RenderedImage src1 = (RenderedImage)JAI.create("stream", pb,null);RenderedImage src2 = (RenderedImage)JAI.create("stream", pb, null);RenderedImage dst = (RenderedImage)JAI.create("add", pb, null);
讲的很不错啊,认同 Eraserpro(工作好难找啊!租房子好贵啊!...)