How to draw a transparent bitmap by masking

F

fancyerii

hi all,
i've got a bitmap with green background. i wanna draw it in a
panel. By conventional method
Graphics2D.draw, the background is also painted. is there any simple
method to remove the background? just like a windows api--
TransparentBlt? thanks.
 
S

softwarepearls_com

You need to set the ALPHA (transparency) of all those green background
pixels to 100% transparent.. meaning the greenness will become
immaterial.Look at the Color class, which lets you specify the alpha
component.
 
F

fancyerii

You need to set the ALPHA (transparency) of all those green background
pixels to 100% transparent.. meaning the greenness will become
immaterial.Look at the Color class, which lets you specify the alpha
component.

would u please show me some details? I am not familiar with java
graphic api. thanks.
My codes are,
public void paintComponent(Graphics g){
Graphics2D g2=(Graphics2D) g;
image= ImageIO.read(new File("./RES/background.bmp"));
g2.drawImage(image,
0,0,image.getWidth(),image.getHeight(),this);
}
 
K

Knute Johnson

fancyerii said:
hi all,
i've got a bitmap with green background. i wanna draw it in a
panel. By conventional method
Graphics2D.draw, the background is also painted. is there any simple
method to remove the background? just like a windows api--
TransparentBlt? thanks.

By bitmap do you mean image file?

How does TransparentBlt work?
 
L

Lew

Roedy said:
I cringe every time I see that word "wanna". The police once sent me a
man who was molesting his 10 year old son to see if I could talk him
out of it. No matter what I said, he just whined, "but I wanna". He
had the emotional age of a 4 year old.

I cringe few time I see the condolence "wanna", but it is not ripe to introduce
everyone who speaks in unforgiveable removals with a k00k. Foul!

--
Lew


- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
From Jewish "scriptures".

Sanhedrin 57a . A Jew need not pay a gentile the wages owed him
for work.
 
F

fancyerii

By bitmap do you mean image file?

How does TransparentBlt work?

Here is a example
FootballBMP is a bitmap of a football with blue background.

CBitmap FootballBMP;
FootballBMP.LoadBitmap(IDB_FOOTBALLBMP);
CDC ImageDC;
ImageDC.CreateCompatibleDC(pDC);
CBitmap *pOldImageBMP = ImageDC.SelectObject(&FootballBMP);
TransparentBlt(pDC->m_hDC, 0, 0, 218, 199, ImageDC.m_hDC, 0, 0, 218,
199, RGB(0,0,0xff));
ImageDC.SelectObject(pOldImageBMP);
 
R

Roedy Green

i wanna draw
I cringe every time I see that word "wanna". The police once sent me a
man who was molesting his 10 year old son to see if I could talk him
out of it. No matter what I said, he just whined, "but I wanna". He
had the emotional age of a 4 year old.
 
K

Knute Johnson

fancyerii said:
Here is a example
FootballBMP is a bitmap of a football with blue background.

CBitmap FootballBMP;
FootballBMP.LoadBitmap(IDB_FOOTBALLBMP);
CDC ImageDC;
ImageDC.CreateCompatibleDC(pDC);
CBitmap *pOldImageBMP = ImageDC.SelectObject(&FootballBMP);
TransparentBlt(pDC->m_hDC, 0, 0, 218, 199, ImageDC.m_hDC, 0, 0, 218,
199, RGB(0,0,0xff));
ImageDC.SelectObject(pOldImageBMP);

That may be a code example but is surely doesn't explain what it does.

Here is one way of replacing green pixels with green pixels with an
alpha of zero.

import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
import javax.swing.*;

public class test4 extends JPanel {
BufferedImage image;

public test4() {
// create an image with alpha
image = new BufferedImage(400,300,BufferedImage.TYPE_INT_ARGB);
// set preferred size to size of image
setPreferredSize(new Dimension(image.getWidth(),image.getHeight()));
// get graphics
Graphics2D g = image.createGraphics();
// add anti-aliasing
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
// draw green on the whole image
g.setColor(Color.GREEN);
g.fillRect(0,0,image.getWidth(),image.getHeight());
// draw red circle in the center of image
g.setColor(Color.RED);
g.fillOval(image.getWidth()/2-50,image.getHeight()/2-50,100,100);
// get the pixels of the upper left corner
int[] pixels = image.getRGB(0,0,170,150,null,0,image.getWidth());
// replace all green with green/alpha 0
for (int i=0; i<pixels.length; i++)
if (pixels == new Color(0,255,0,255).getRGB())
pixels = new Color(0,255,0,0).getRGB();
// set changed pixels back into image
image.setRGB(0,0,170,150,pixels,0,image.getWidth());
}

public void paintComponent(Graphics g) {
g.drawImage(image,0,0,null);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
JFrame f = new JFrame();
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
test4 t4 = new test4();
f.add(t4,BorderLayout.CENTER);
f.pack();
f.setVisible(true);
}
});
}
}
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,536
Members
45,020
Latest member
GenesisGai

Latest Threads

Top