Re: How to draw a transparent bitmap by masking
fancyerii wrote:
On 8??3??, ????5??14??, Knute Johnson <nos...@rabbitbrush.frazmtn.com>
wrote:
fancyerii wrote:
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?
--
Knute Johnson
email s/nospam/knute2008/
--
Posted via NewsDemon.com - Premium Uncensored Newsgroup Service
------->>>>>>http://www.NewsDemon.com<<<<<<------
Unlimited Access, Anonymous Accounts, Uncensored Broadband Access
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[i] == new Color(0,255,0,255).getRGB())
pixels[i] = 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);
}
});
}
}
--
Knute Johnson
email s/nospam/knute2008/
--
Posted via NewsDemon.com - Premium Uncensored Newsgroup Service
------->>>>>>http://www.NewsDemon.com<<<<<<------
Unlimited Access, Anonymous Accounts, Uncensored Broadband Access