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 / General / June 2007

Tip: Looking for answers? Try searching our database.

have to use different image types, depending on the OS. how?

Thread view: 
linuxadmin@yandex.ru - 20 Jun 2007 12:54 GMT
hello!

i load JPEG images into BufferedImage objects and draw them using
Graphics2D.drawImage(...)

to be able to use LookupOp (for gamma and brightness adjustments) i
have to convert them to one of the following image types:
TYPE_INT_RGB or TYPE_INT_BGR.
the JPEG-native type TYPE_INT_3BGR doesn't work.

[ note: the conversion is done by creating an empty BufferedImage with
same size but different image type, and drawing the loaded image into
the newly created image: ]

    BufferedImage img = ImageIO.read(new File(fileName));

    BufferedImage temp;
    temp = new BufferedImage(img.getWidth(), img.getHeight(),
        BufferedImage.TYPE_INT_RGB    // <-problem
    );

    temp.getGraphics().drawImage(img, 0, 0, null);
    img = temp;

now the problem:
the images are drawn correctly, when using
TYPE_INT_BGR under linux   but:   TYPE_INT_RGB under windows.
so, when the 'wrong' type is used, the colors look ugly.

i tried to get to know the system-native image type by letting
GraphicConfiguration create a BufferedImage:

    GraphicsEnvironment ge = GraphicsEnvironment
            .getLocalGraphicsEnvironment();
    GraphicsDevice gd = ge.getDefaultScreenDevice();
    GraphicsConfiguration gc = gd.getDefaultConfiguration();
    BufferedImage bestImage = gc.createCompatibleImage(1, 1);

but: on both systems bestImage.getType() equals TYPE_INT_RGB, so under
linux the colors are wrong.

i think that it is wrong to assume, that the linux platform always
implies TYPE_INT_BGR and the windows platform always implies
TYPE_INT_RGB.

so how can i get the real system-native image type?

thanks in advice!
Knute Johnson - 21 Jun 2007 00:40 GMT
> hello!
>
[quoted text clipped - 44 lines]
>
> thanks in advice!

Try the method below to convert your image to the type you want it to
be.  This method converts to a compatible type but you can make it any
type you want.

    // method to convert an image read from a file to a compatible image
    BufferedImage convertImage(BufferedImage image) {
        GraphicsEnvironment ge =
         GraphicsEnvironment.getLocalGraphicsEnvironment();
        GraphicsDevice[] devices = ge.getScreenDevices();
        GraphicsConfiguration gc =
         devices[Math.min(devices.length-1,0)].getDefaultConfiguration();

        BufferedImage compatible gc.createCompatibleImage(image.getWidth(),
         image.getHeight());

        if (compatible.getType() == image.getType())
            return image;

        ColorConvertOp op = new ColorConvertOp(
         image.getColorModel().getColorSpace(),
         compatible.getColorModel().getColorSpace(), null);
        op.filter(image, compatible);

        return compatible;
    }

Signature

Knute Johnson
email s/nospam/knute/

linuxadmin@yandex.ru - 21 Jun 2007 12:23 GMT
thank you very much, i'll try it out!


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



©2009 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.