先把graphics设置一下颜色,用 ARGB颜色
g.setColor(new Color(r,g,b,a));
然后再画f.jpg再设置颜色RGB
g.setColor(new Color(r,g,b));
再画d.jpg看看
g.setColor(new Color(r,g,b,a));
然后再画f.jpg再设置颜色RGB
g.setColor(new Color(r,g,b));
再画d.jpg看看
这个方法不知道如何用,它好像有个设置透明的属性。
public abstract boolean drawImage(Image img,
int x,
int y,
int width,
int height,
Color bgcolor,
ImageObserver observer)
我看了一下jdk的help,Color.TRANSLUCENT
这个东东怎么用呢,求教???
new Color(0.7F, 0.7F, 0.0F, 0.5F) 为一种淡黄色,透明度为50%。
int rule = AlphaComposite.SRC_OVER; //透明的至于现有图形的上面
float alpha = 0.5 // 50%透明
g2.setComposite(AlphaComposite.getInstance(rule, alpha));
试过了,不能如愿啊。有其他办法吗?谢谢........
在Graphics中找不到 setComposite()方法,怎么办呢,谢谢了!
public abstract void
setComposite(Composite comp)
将Graphics 换成 Graphics2d后什么都显示不出来了,连最初的2个图片也没有了,怎么办啊。谢谢
所以,你的上面的一层一定要做成GIF的格式,才有可能实现。
如果你要把JPG的图片变成GIF的格式,并且去掉背景的颜色,实在是有点困难。
我没有找到GIF的图象的格式,如果那位有的话,给我一份。
如果img1是背景透明的GIF的话,不用进行另外的处理的呀,下面的图片肯定不会被遮住
如果你要把JPG的图片变成GIF的格式,并且去掉背景的颜色,实在是有点困难。
-----
但头对我说,一定可以实现。我昏啊。
现在我在《Java2核心技术》2 中找到了部分源码,可做到旋转、模糊、底片等功能,但就是没有透明功能。我昏四啊..................
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.image.*;
import java.io.*;public class ImageProcessingTest
{ public static void main(String[] args)
{ JFrame frame = new ImageProcessingFrame();
frame.show();
}
}class ImageProcessingFrame extends JFrame
implements ActionListener
{ public ImageProcessingFrame()
{ setTitle("ImageProcessingTest");
setSize(300, 400);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
} ); Container contentPane = getContentPane();
panel = new ImageProcessingPanel();
contentPane.add(panel, "Center"); JMenu fileMenu = new JMenu("File");
openItem = new JMenuItem("Open");
openItem.addActionListener(this);
fileMenu.add(openItem); exitItem = new JMenuItem("Exit");
exitItem.addActionListener(this);
fileMenu.add(exitItem); JMenu editMenu = new JMenu("Edit");
blurItem = new JMenuItem("Blur");
blurItem.addActionListener(this);
editMenu.add(blurItem); sharpenItem = new JMenuItem("Sharpen");
sharpenItem.addActionListener(this);
editMenu.add(sharpenItem); brightenItem = new JMenuItem("Brighten");
brightenItem.addActionListener(this);
editMenu.add(brightenItem); edgeDetectItem = new JMenuItem("Edge detect");
edgeDetectItem.addActionListener(this);
editMenu.add(edgeDetectItem); negativeItem = new JMenuItem("Negative");
negativeItem.addActionListener(this);
editMenu.add(negativeItem); rotateItem = new JMenuItem("Rotate");
rotateItem.addActionListener(this);
editMenu.add(rotateItem); JMenuBar menuBar = new JMenuBar();
menuBar.add(fileMenu);
menuBar.add(editMenu);
setJMenuBar(menuBar);
} public void actionPerformed(ActionEvent evt)
{ Object source = evt.getSource();
if (source == openItem)
{ JFileChooser chooser = new JFileChooser();
chooser.setCurrentDirectory(new File(".")); chooser.setFileFilter(new
javax.swing.filechooser.FileFilter()
{ public boolean accept(File f)
{ String name = f.getName().toLowerCase();
return name.endsWith(".gif")
|| name.endsWith(".jpg")
|| name.endsWith(".jpeg")
|| f.isDirectory();
}
public String getDescription()
{ return "Image files";
}
}); int r = chooser.showOpenDialog(this);
if(r == JFileChooser.APPROVE_OPTION)
{ String name
= chooser.getSelectedFile().getAbsolutePath();
panel.loadImage(name);
}
}
else if (source == exitItem) System.exit(0);
else if (source == blurItem) panel.blur();
else if (source == sharpenItem) panel.sharpen();
else if (source == brightenItem) panel.brighten();
else if (source == edgeDetectItem) panel.edgeDetect();
else if (source == negativeItem) panel.negative();
else if (source == rotateItem) panel.rotate();
} private ImageProcessingPanel panel;
private JMenuItem openItem;
private JMenuItem exitItem;
private JMenuItem blurItem;
private JMenuItem sharpenItem;
private JMenuItem brightenItem;
private JMenuItem edgeDetectItem;
private JMenuItem negativeItem;
private JMenuItem rotateItem;
}class ImageProcessingPanel extends JPanel
{ public void paintComponent(Graphics g)
{ super.paintComponent(g);
if (image != null)
g.drawImage(image, 0, 0, null);
} public void loadImage(String name)
{ Image loadedImage
= Toolkit.getDefaultToolkit().getImage(name);
MediaTracker tracker = new MediaTracker(this);
tracker.addImage(loadedImage, 0);
try { tracker.waitForID(0); }
catch (InterruptedException e) {}
image = new BufferedImage(loadedImage.getWidth(null),
loadedImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
g2.drawImage(loadedImage, 0, 0, null); repaint();
} private void filter(BufferedImageOp op)
{ BufferedImage filteredImage
= new BufferedImage(image.getWidth(), image.getHeight(),
image.getType());
op.filter(image, filteredImage);
image = filteredImage;
repaint();
} private void convolve(float[] elements)
{ Kernel kernel = new Kernel(3, 3, elements);
ConvolveOp op = new ConvolveOp(kernel);
filter(op);
} public void blur()
{ float weight = 1.0f/9.0f;
float[] elements = new float[9];
for (int i = 0; i < 9; i++)
elements[i] = weight;
convolve(elements);
} public void sharpen()
{ float[] elements =
{ 0.0f, -1.0f, 0.0f,
-1.0f, 5.f, -1.0f,
0.0f, -1.0f, 0.0f
};
convolve(elements);
} void edgeDetect()
{ float[] elements =
{ 0.0f, -1.0f, 0.0f,
-1.0f, 4.f, -1.0f,
0.0f, -1.0f, 0.0f
};
convolve(elements);
} public void brighten()
{ float a = 1.5f;
float b = -20.0f;
RescaleOp op = new RescaleOp(a, b, null);
filter(op);
} void negative()
{ byte negative[] = new byte[256];
for (int i = 0; i < 256; i++)
negative[i] = (byte)(255 - i);
ByteLookupTable table = new ByteLookupTable(0, negative);
LookupOp op = new LookupOp(table, null);
filter(op);
} void rotate()
{ AffineTransform transform
= AffineTransform.getRotateInstance(Math.toRadians(5),
image.getWidth() / 2, image.getHeight() / 2);
AffineTransformOp op = new AffineTransformOp(transform,
AffineTransformOp.TYPE_BILINEAR);
filter(op);
} private BufferedImage image;
}
(BufferedImage有一个取像素点的功能,可以用用看)
http://expert.csdn.net/Expert/topic/2407/2407594.xml?temp=.7180292