Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / GUI / March 2007

Tip: Looking for answers? Try searching our database.

Making color image with transparency into black & white w/transparency

Thread view: 
gswarthout@gmail.com - 29 Mar 2007 17:59 GMT
I need to turn a series of icon images into black & white equivalents
programattically in a paint method.

I'm starting with roughly circular images which are colored within and
everything outside of the circle is transparent.  The transparency
displays properly when the images are used in their normal form.

On the fly, however, I want to recolor select images into gray-scale
reflections of their original form, which I do with the following
code:

<Code>
BufferedImage grayImage = new BufferedImage(usableWidth, usableHeight,
BufferedImage.TYPE_BYTE_GRAY);
Graphics2D grayGraphics = grayImage.createGraphics();
grayGraphics.drawImage(originalImage, 0, 0, usableWidth, usableHeight,
this);
</Code>

This produces the effect I want with one problem, the previously
transparent corners of the image are now black.  I then draw this gray-
scale image into a new image which allows for transparency thusly:

<Code>
BufferedImage bufferedImage = new BufferedImage(usableWidth,
usableHeight, BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bufferedImage.createGraphics();
g2d.drawImage(grayImage, 0, 0, usableWidth, usableHeight, this);
</Code>

>From here I have been unable to find a way to change the corners back
to being transparent (ignoring that it would turn all other instances
of black transparent as well).  I've tried XORing black with white
and, sure enough, this turns black into white and vice versa, but not
transparent.  I've tried it with new (Color 255, 255, 255, 0) which
would be a fully transparent white and it still doesn't work.

How can I accomplish this feat with either A) the way I started or, B)
a better way that I haven't explored?

Any help would be appreciated.

Greg
Knute Johnson - 29 Mar 2007 19:25 GMT
> I need to turn a series of icon images into black & white equivalents
> programattically in a paint method.
[quoted text clipped - 39 lines]
>
> Greg

Greg:

Try this and see if it works for you.  You might have to play with the
transparency.  If you want send me one of your images with the
transparent pixels and I'll try it.

import java.awt.*;
import java.awt.image.*;
import java.io.*;
import javax.imageio.*;

public class test {
    public static void main (String[] args) throws Exception {
        GraphicsEnvironment ge =
         GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice gd = ge.getDefaultScreenDevice();
        GraphicsConfiguration gc = gd.getDefaultConfiguration();

        BufferedImage src = ImageIO.read(new File("saturn.jpg"));
        BufferedImage dest =
         new BufferedImage(src.getWidth(),src.getHeight(),
         BufferedImage.TYPE_BYTE_GRAY);

        ColorConvertOp op = new ColorConvertOp(
         src.getColorModel().getColorSpace(),
         dest.getColorModel().getColorSpace(),
         null);

        op.filter(src,dest);

        ImageIO.write(dest,"JPG",new File("bw.jpg"));
    }
}

Signature

Knute Johnson
email s/nospam/knute/

Knute Johnson - 29 Mar 2007 19:27 GMT
>> I need to turn a series of icon images into black & white equivalents
>> programattically in a paint method.
[quoted text clipped - 73 lines]
>     }
> }

And ignore the GraphicsEnvironment, GraphicsDevice and
GraphicsConfiguration code in the above.  I just didn't rip that out of
what I started with.

Signature

Knute Johnson
email s/nospam/knute/

gswarthout@gmail.com - 29 Mar 2007 20:10 GMT
On Mar 29, 12:25 pm, Knute Johnson <nos...@rabbitbrush.frazmtn.com>
wrote:
> gswarth...@gmail.com wrote:
> > I need to turn a series of icon images into black & white equivalents
[quoted text clipped - 80 lines]
> Knute Johnson
> email s/nospam/knute/

Unfortunately that, too, leaves the black corners intact.  I will look
into these filter ops further, though.

Greg
Thomas A. Russ - 30 Mar 2007 17:33 GMT
Maybe you could look at java.awt.image.RGBImageFilter and write your own
RGB => Grayscale conversion.  Or maybe using the existing
javax.swing.GrayFilter will do what you want.  I'm not sure if the
latter one preserves the alpha channel, though.

Signature

Thomas A. Russ,  USC/Information Sciences Institute

gswarthout@gmail.com - 29 Mar 2007 20:33 GMT
Solution found, with help from Knute:

BufferedImage bufferedImage = new BufferedImage(usableWidth,
usableHeight, BufferedImage.TYPE_4BYTE_ABGR_PRE);
bufferedImage.createGraphics().drawImage(img, 0, 0, usableWidth,
usableHeight, this);

ColorSpace grayColorSpace =
ColorSpace.getInstance(ColorSpace.CS_GRAY);
ColorConvertOp op = new ColorConvertOp(grayColorSpace,
bufferedImage.getColorModel().getColorSpace(), null);
op.filter(bufferedImage, bufferedImage);

g.drawImage(bufferedImage, MARGIN, MARGIN, usableWidth, usableHeight,
this);

Greg


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.