Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.gui > #3995
| From | "John B. Matthews" <john.b..matthews@THRWHITE.remove-dii-this> |
|---|---|
| Subject | Re: Anti-aliasing in imag |
| Message-ID | <nospam-B95FB8.00515215082008@aioe.org> (permalink) |
| Newsgroups | comp.lang.java.gui |
| References | <48a4f9d9$0$4009$b9f67a60@news.newsdemon.com> |
| Date | 2011-04-27 15:48 +0000 |
| Organization | TDS.net |
To: comp.lang.java.gui In article <48a4f9d9$0$4009$b9f67a60@news.newsdemon.com>, Knute Johnson <nospam@rabbitbrush.frazmtn.com> wrote: > Daniele Futtorovic wrote: > > 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. > > > > I thought that was what the AlphaComposites were for... > > > >> 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. > > > > ... ah. > > > > To get this right, are you positively sure there is no way? Not > > even playing with XOR paint? > > I can't swear that XOR paint won't but I couldn't make it work. Of > course that is not definitive :-). I've been tinkering with Knute's examples and reading the API. I'd be grateful if someone could comment critically on what I think I understand: 0. You can paint with any color you want: opaque, translucent, transparent. That does not modify the alpha component of the destination pixel, except to overwrite the pixel with entirely new ARGB values. (That's how I interpreted, "can't draw alpha into an image.") 1. You can change the alpha component of a pixel in a BufferedImage using get/setRGB() or getRaster(), but you have to loop through the pixels to effect the change. 2. Each of the 12 Composites in AlphaComposite implements a rule for combining source and destination pixels when drawing. When you draw in a Graphics2D that has a Composite set, each destination pixel is set according to the Composite's rule and the alpha component of the chosen color. 3. The rule in AlphaComposite.Clear says, "Anything that's painted becomes transparent black [Color(0, true)] in the destination image," as if it were a stencil with the painted part punched out. When this stencil is later drawn, any underlying image pixels "show through" the transparent ones. 4. The rule in AlphaComposite.Src says, "Any painted pixel gets set to the the current color and alpha." Knute used SrcOver for the rings of fuzziness, but Src is identical for a transparent destination. -- John B. Matthews trashgod at gmail dot com home dot woh dot rr dot com slash jbmatthews --- * 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 "John B. Matthews" <john.b..matthews@THRWHITE.remove-dii-this> - 2011-04-27 15:48 +0000
csiph-web