Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- final int width = image.getWidth();
- int[] imgData = new int[width];
- int[] maskData = new int[width];
- for (int y = 0; y < image.getHeight(); y++) {
- // fetch a line of data from each image
- image.getRGB(0, y, width, 1, imgData, 0, 1);
- mask.getRGB(0, y, width, 1, maskData, 0, 1);
- // apply the mask
- for (int x = 0; x < width; x++) {
- int color = imgData[x] & 0x00FFFFFF; // mask away any alpha present
- int mask = (maskData[x] & 0x00FF0000) << 8; // shift red into alpha bits
- color |= mask;
- imgData[x] = color;
- }
- // replace the data
- image.setRGB(0, y, width, 1, imgData, 0, 1);
- }
- TestMask() throws IOException
- {
- m_images = new BufferedImage[3];
- m_images[0] = ImageIO.read(new File("E:/Documents/images/map.png"));
- m_images[1] = ImageIO.read(new File("E:/Documents/images/mapMask3.png"));
- Image transpImg = TransformGrayToTransparency(m_images[1]);
- m_images[2] = ApplyTransparency(m_images[0], transpImg);
- }
- 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;
- }
- public void applyGrayscaleMaskToAlpha(BufferedImage image, BufferedImage mask)
- {
- int width = image.getWidth();
- int height = image.getHeight();
- int[] imagePixels = image.getRGB(0, 0, width, height, null, 0, width);
- int[] maskPixels = mask.getRGB(0, 0, width, height, null, 0, width);
- for (int i = 0; i < imagePixels.length; i++)
- {
- int color = imagePixels[i] & 0x00ffffff; // Mask preexisting alpha
- int alpha = maskPixels[i] << 24; // Shift green to alpha
- imagePixels[i] = color | alpha;
- }
- image.setRGB(0, 0, width, height, imagePixels, 0, width);
- }
- for (int y = 0; y < image.getHeight(); y++) {
- for (int x = 0; x < image.getWidth(); x++) {
- Color c = new Color(image.getRGB(x, y));
- Color maskC = new Color(mask.getRGB(x, y));
- Color maskedColor = new Color(c.getRed(), c.getGreen(), c.getBlue(),
- maskC.getRed());
- resultImg.setRGB(x, y, maskedColor.getRGB());
- }
- }
Add Comment
Please, Sign In to add comment