【问题标题】:Bring Image Transparent使图像透明
【发布时间】:2012-08-27 07:05:04
【问题描述】:

我想带一个图像透明度的特殊部分。我怎么能在java中做到这一点?我尝试了一些代码:

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();
            }

【问题讨论】:

  • 对不起,我完全不知道你要做什么。你将不得不更新你的问题,也许有一些例子??
  • Bring Special Part of an image transparent 的可能重复项。请不要重新发布问题(两次)。可以编辑问题。
  • 好的。如何使裁剪图像的区域透明?

标签: java image transparency


【解决方案1】:

好吧,我放弃了,或者说无聊了。

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);
            }
        });
    }
}

【讨论】:

    【解决方案2】:

    不确定我是否理解这个问题。但是,仅绘制BufferedImage 的一部分的简单方法是使用以下代码:

    BufferedImage bi = [ ... ];
    Graphics2D g = bi.createGraphics();
    g.setClip(x, y, width, height);
    

    或者,如果您想删除图像的一部分,您可以使用g.clip(shape)g.clipRect(x, y, width, height),这将删除一个矩形。

    【讨论】:

    • 另请参阅此人的duplicate questions(其中之一)的答案。
    • 其实我的错。我投票结束第二个问题(第一个重复)作为“不是一个真正的问题”,然后投票给第一个(这个)和第三个重复。将我的答案移到此处并将其从第一个副本中删除会更有意义。 :-/
    猜你喜欢
    • 1970-01-01
    • 2018-10-09
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多