Java 使图像透明
我想带一个特殊部分的图像透明度。我如何在java中做到这一点?我尝试了一些代码:Java 使图像透明,java,image,transparency,Java,Image,Transparency,我想带一个特殊部分的图像透明度。我如何在java中做到这一点?我尝试了一些代码: public BufferedImage[] splitBackgroundImages() throws IOException { int count = 0; bimages = new BufferedImage[chuncks]; for (int x = 0; x < columns; x++) { for (int y =
public BufferedImage[] splitBackgroundImages() throws IOException {
int count = 0;
bimages = new BufferedImage[chuncks];
for (int x = 0; x < columns; x++) {
for (int y = 0; y < rows; y++) {
// Initialize the image array with image chunks
bimages[count] = image.getSubimage(x * this.chunckwidth, y
* this.chunckheigth, this.chunckwidth,
this.chunckheigth);
Graphics2D gr = bimages[count].createGraphics();
gr.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, 1));
//gr.clearRect(5, 5, chunckwidth-10, chunckheigth -10);
Color transparent = new Color(0,0,0,0);
gr.setPaint(transparent);
gr.setBackground(transparent);
gr.fillRect(5, 5, chunckwidth-10, chunckheigth-10);
/*bimages[count] = gr.getDeviceConfiguration().createCompatibleImage(
chunckwidth, chunckheigth, Transparency.TRANSLUCENT);
*/
gr.fillRect(5, 5, chunckwidth-10, chunckheigth-10);
gr.drawImage(bimages[count++], 0, 0, chunckwidth, chunckheigth,
chunckwidth * y, chunckheigth * x, chunckwidth * y
+ chunckwidth, chunckheigth * x + chunckwidth,
null);
gr.dispose();
}
public buffereImage[]splitBackgroundImages()引发IOException{
整数计数=0;
bimages=新的缓冲区映像[chuncks];
对于(int x=0;x
我不确定我是否理解这个问题。但是,仅绘制缓冲区图像的一部分的简单方法是使用以下代码:
BufferedImage bi = [ ... ];
Graphics2D g = bi.createGraphics();
g.setClip(x, y, width, height);
或者,如果你想删除图像的一部分,你可以使用g.clip(shape)
,或者g.clipRect(x,y,width,height)
,这将删除一个矩形。好吧,我让步了,或者更确切地说是厌倦了
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.BufferedImage;
import java.net.URL;
import javax.imageio.ImageIO;
import javax.swing.*;
public class HoleRing {
HoleRing(BufferedImage image) {
// presumes the images are identical in size BNI
int w = image.getWidth();
int h = image.getHeight();
Ellipse2D.Double ellipse1 = new Ellipse2D.Double(
w/16,h/16,7*w/8,7*h/8);
Ellipse2D.Double ellipse2 = new Ellipse2D.Double(
w/4,h/4,w/2,h/2);
Area circle = new Area(ellipse1);
circle.subtract(new Area(ellipse2));
BufferedImage result = new BufferedImage(w,h,BufferedImage.TYPE_INT_ARGB);
Graphics2D g = result.createGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g.setRenderingHint(RenderingHints.KEY_DITHERING, RenderingHints.VALUE_DITHER_ENABLE);
g.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
g.setClip(circle);
g.drawImage(image, 0, 0, null);
g.setClip(null);
Stroke s = new BasicStroke(2);
g.setStroke(s);
g.setColor(Color.BLACK);
g.draw(circle);
g.dispose();
JLabel l = new JLabel(new ImageIcon(result));
JOptionPane.showMessageDialog(null, l);
}
public static void main(String[] args) throws Exception {
URL url = new URL("http://pscode.org/media/stromlo1.jpg");
final BufferedImage bi = ImageIO.read(url);
SwingUtilities.invokeLater(new Runnable(){
@Override
public void run() {
new HoleRing(bi);
}
});
}
}
很抱歉,我完全不知道你要做什么。你必须更新你的问题,也许有一些例子??可能重复。请不要重复问题(两次)。问题可以编辑。好的。我如何使裁剪的图像区域透明?另请参阅(其中一个)的答案这个人的。实际上我的错。我投票结束了第二个问题(第一个重复)作为“不是真正的问题”,然后投票第一个(这个)和第三个作为重复。将我的答案移到这里并从第一个重复中删除会更有意义-/