1

灰色の陰影画像に白い斑点を含む黒い画像を重ねたい。この黒い画像を透明にしたい。ここで説明したコードをJavaで使用しました。

ただし、出力には赤い画像が表示されます。なんで?

コードはここに記載されています:

    public class OverlayImage{
        public static void main(String[] args) {
            File path = new File("/home/dmdd/Desktop/images"); // base path of the images

            // load source images
            BufferedImage image=null;
            BufferedImage overlay=null;
            try {
                image = ImageIO.read(new File(path, "image.jpg"));
                overlay = ImageIO.read(new File(path, "overlay.jpg"));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //overlay =(BufferedImage) makeImageTransparent(overlay,50);
            OverlayImage over=new OverlayImage();
            // create the new image, canvas size is the max. of both image sizes
            int w = Math.max(image.getWidth(), overlay.getWidth());
            int h = Math.max(image.getHeight(), overlay.getHeight());
            //BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);

            Image overlay1=over.TransformGrayToTransparency(overlay);
            BufferedImage combined=over.ApplyTransparency(image, overlay1);
            try {
                ImageIO.write(over.toBufferedImage(combined, w, h), "JPG", new File(path, "combined.jpg"));
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }
        private Image TransformGrayToTransparency(BufferedImage image)
        {
            ImageFilter filter = new RGBImageFilter()
            {
                public final int filterRGB(int x, int y, int rgb)
                {
                    return (rgb << 8) & 0xFF000000;
                }
            };

            ImageProducer ip = new FilteredImageSource(image.getSource(), filter);
            return Toolkit.getDefaultToolkit().createImage(ip);
        }

        private BufferedImage ApplyTransparency(BufferedImage image, Image mask)
        {
            BufferedImage dest = new BufferedImage(
                    image.getWidth(), image.getHeight(),
                    BufferedImage.TYPE_INT_ARGB);
            Graphics2D g2 = dest.createGraphics();
            g2.drawImage(image, 0, 0, null);
            AlphaComposite ac = AlphaComposite.getInstance(AlphaComposite.DST_IN, 1.0F);
            g2.setComposite(ac);
            g2.drawImage(mask, 0, 0, null);
            g2.dispose();
            return dest;
        }
}

ホワイトスポットの画像は次のとおりです。 ここに画像の説明を入力してください

黒い画像は次のとおりです。 ここに画像の説明を入力してください

オーバーレイされた赤い画像は次のとおりです。 ここに画像の説明を入力してください

4

1 に答える 1

2

結果の画像をjpegとして保存しようとしています。結果の画像にはアルファ/透明度レベルが含まれますが、jpeg画像は透明度をサポートしていません。png画像として保存します。

于 2012-10-01T11:26:40.923 に答える