Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.gui > #3998
| From | "Daniele Futtorovic" <daniele.futtorovic@THRWHITE.remove-dii-this> |
|---|---|
| Subject | Re: Anti-aliasing in imag |
| Message-ID | <g84ob3$ner$1@registered.motzarella.org> (permalink) |
| Newsgroups | comp.lang.java.gui |
| References | <48a4c7b8$0$4030$b9f67a60@news.newsdemon.com> |
| Date | 2011-04-27 15:48 +0000 |
| Organization | TDS.net |
To: comp.lang.java.gui
On 15/08/2008 02:03, Knute Johnson allegedly wrote:
> Daniele Futtorovic wrote:
>> On 14/08/2008 17:20, Knute Johnson allegedly wrote:
>>> Well there's a truth that it took me a while to learn and that is
>>> that you can't draw alpha into an image.
>>
>> Must be jolly interesting if it's something that took you a while to
>> learn. So... what does that sentence mean?
>
> If you have an image, you basically can't draw on it (with the usual
> Graphics(2D) methods) and reduce the alpha value of the pixels in the
> image. Say you have a pixel that is white with an alpha of 255. There
> is no way to draw on the image to change that pixel's alpha to another
> value. Unless of course you use an AlphaComposite with a value of
> Clear. That will change it to a black pixel with an alpha of 0.
Hmmm. Having played around, and more importantly thought about it a bit,
I'll have to concur with your assessment.
For the record, here's the last state of my experiments. It achieves the
desired effect, but it's cheating (drawing twice and clipping in-between):
<code>
package scratch;
import java.awt.*;
import java.awt.geom.*;
import java.awt.image.*;
import javax.swing.*;
import javax.imageio.*;
/**
*
* @author da.futt
*/
public class XORTest
{
public static void main(String[] ss) {
EventQueue.invokeLater(
new Loader() {
public BufferedImage loadImage() throws Exception {
return
ImageIO.read(XORTest.class.getResource("animage.png"));
}
});
}
private static abstract class Loader
implements Runnable
{
public abstract BufferedImage loadImage()
throws Exception;
private Image prepareImage()
throws Exception
{
BufferedImage i = loadImage();
BufferedImage bi = new BufferedImage(i.getWidth(),
i.getHeight(),
BufferedImage.TYPE_INT_ARGB_PRE);
Graphics2D g = bi.createGraphics();
g.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
int d = Math.min(i.getWidth(), i.getHeight()) >> 1;
Shape ell = new Ellipse2D.Float((i.getWidth() - d) >> 1,
(i.getHeight() - d) >> 1, d, d);
Shape oldclip = g.getClip();
g.clip(ell);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC, .3f));
g.drawImage(i, 0, 0, null);
g.setClip(oldclip);
g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OUT));
g.drawImage(i, 0, 0, null);
g.dispose();
return bi;
}
public void run() {
try {
run0();
}
catch (Exception x) {
x.printStackTrace();
}
}
private void run0()
throws Exception
{
JFrame f = new JFrame("XOR paint test");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setContentPane(new BackgroundPanel(new BorderLayout()));
f.getContentPane().setPreferredSize(new Dimension(300, 200));
f.getContentPane().add(new JLabel(new ImageIcon(
prepareImage())), BorderLayout.CENTER);
f.pack();
f.setLocationRelativeTo(null);
f.setVisible(true);
}
}
private static class BackgroundPanel
extends JPanel
{
private static final int MARMOR_SIDE_PX = 20;
public BackgroundPanel() {
super();
}
public BackgroundPanel(LayoutManager layout) {
super(layout);
}
@Override
public void paintComponent(Graphics g) {
Color white = new Color(0xf0f0f0),
black = new Color(0x0f0f0f);
int x = 0, y = 0, line = 0, col = 0;
for (final int h = getHeight(), w = getWidth(); y < h;
y += MARMOR_SIDE_PX, line++, col = 0, x = 0)
{
for (; x < w; x += MARMOR_SIDE_PX, col++) {
g.setColor((col + line) % 2 == 0 ? black : white);
g.fillRect(x, y, MARMOR_SIDE_PX, MARMOR_SIDE_PX);
}
}
}
}
}
</code>
--
DF.
---
* Synchronet * The Whitehouse BBS --- whitehouse.hulds.com --- check it out free usenet!
--- Synchronet 3.15a-Win32 NewsLink 1.92
Time Warp of the Future BBS - telnet://time.synchro.net:24
Back to comp.lang.java.gui | Previous | Next | Find similar
Re: Anti-aliasing in imag "Daniele Futtorovic" <daniele.futtorovic@THRWHITE.remove-dii-this> - 2011-04-27 15:48 +0000
csiph-web