C/C++可以实现一个这样的功能:
两张一样大的图片,
A是一个黑色背景的小图形,
B是黑白两色,其中白色的形状正好是A中图形的形状,用这两张图片可以切出A中的图像(正好把A中的黑色背景去掉),就像PS里面的抠图一样。这样切出来的图形就是不带背景的,可以方便再处理。请问JAVA中怎么实现?
两张一样大的图片,
A是一个黑色背景的小图形,
B是黑白两色,其中白色的形状正好是A中图形的形状,用这两张图片可以切出A中的图像(正好把A中的黑色背景去掉),就像PS里面的抠图一样。这样切出来的图形就是不带背景的,可以方便再处理。请问JAVA中怎么实现?
import java.awt.geom.*;
import javax.swing.*;public class TestImageClip extends JPanel {
Image img = null;
boolean isClip;
Area picture = null, area = null; public TestImageClip(Image img, boolean isClip) {
this.isClip = isClip;
this.img = img; area=
new Area(
new GeneralPath(
new Rectangle2D.Float(100, 100, 200, 200))); picture =
new Area(
new GeneralPath(
new Rectangle(0, 0,
img.getWidth(this),
img.getHeight(this))));
} public void paintComponent(Graphics g) {
Graphics2D g2 = (Graphics2D)g; if (isClip) {
area.subtract(picture);
g2.setClip(area);
} g2.drawImage(img, 0, 0, this);
} public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setPreferredSize(
new Dimension(500, 400)); boolean isClip = true; if (args.length == 0) {
System.out.println(
"Usage: java TestImageClip <img pathName> [ture|false]");
System.exit(0);
} else if (args.length == 2) {
isClip = Boolean.parseBoolean(args[1]);
} Image img = Toolkit.getDefaultToolkit().getImage(args[0]);
Container container = frame.getContentPane();
TestImageClip test = new TestImageClip(img, isClip); container.add(test); frame.pack();
frame.setVisible(true);
}
}
然后拿这个计算出来的“部分”去切A
这个问题有点难度,最近又有别的事,所以短时间内解决不了了。我对image的操作不熟,了解一点。大致知道所有的有关Image的处理集中在包java.awt.image 里面,另外java.awt里面也有几个,象Graphics,Graphics2D,还有AlphaComposite等。因为对你的需求有疑问,我考虑解决你这个问题的有两个思路。
下面用mold表示图片B,pic表示图片A一种直接在pic上选择想去除的颜色,换成你自己希望的颜色,类似于MS Painter画笔中的墨水瓶功能。从而达到要求。二是先用第一种方法改变mold的颜色,将颜色置为透明,从而得到形状。然后再用剩余部分与pic合成,达到最终要求。到目前为止,我估计使用java.awt.image.ColorConvertOp还有java.awt.AlphaComposite能实现上述功能,但确实没有这方面的经验。虽然很感兴趣,但最近一段时间顾不上研究这块儿了。关注。
现在找不到了
我刚翻译几篇image的文章,介绍的是随同jdk发布的java.image
http://blog.csdn.net/Unagain另外,sun提供了jai可以对图像进行高级操作。
我这里有图片格式转换已经缩放的代码,也有设置背景色的。
http://blog.csdn.net/kaukiyou/archive/2006/03/30/644757.aspx