Hi !
Featured games (90)
games approved by the League of Dukes
Games in Showcase (741)
Games in Android Showcase (225)
games submitted by our members
Games in WIP (823)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  createCompatibleImage() Question  (Read 3110 times)
0 Members and 1 Guest are viewing this topic.
Offline Z-Man
« Posted 2011-07-09 23:03:28 »

I was reading KGPJ (Killer Game Programming in Java) and the author talks about using createCompatibleImage() to create a BufferedImage that is optimized for the internals of the graphics device, and to mark the BufferedImage as a managed image. It also says that since J2SE 5 any image read in with is marked as a managed image. So my question is does anyone know if using createCompatibleImage() really optimizes the image for the graphics object, or if it doesn't really have any affect since the BufferedImage would be marked as manged already.

Offline loom_weaver

JGO Coder

Medals: 17

« Reply #1 - Posted 2011-07-10 00:26:49 »

createCompatibleImage is to create a new image.  Yes, it does create a managed image which is vitally important if you want good performance.

If you're creating the image via then you should also have a managed image.  You don't need to involve createCompatibleImage as well unless I'm misunderstanding your use-case.
Offline Z-Man
« Reply #2 - Posted 2011-07-10 01:16:37 »

I know that also makes the image managed, but the book talks about createCompatibleImage() optimizing the image as well as making it managed. So I'm wondering if it does optimize the image and, and if it's worth it. It sounds like it's not. The book loads an image using Then it creates a compatible image with createCompatibleImage(). Finally it copies the image read in by to the image created by createCompatibleImage(). The book is from 2005 which is why I'm wondering if it still applies. The book says this about it:
In J2SE 5.0 the JVM knows that any image read in by ImageIO's read can become a managed image, so the call to createCompatibleImage() is no longer necessary for that reason. The call should still be made though since it optimizes the BufferedImage's internals for the graphics device.
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline Riven

« JGO Overlord »

Medals: 1324
Projects: 4
Exp: 16 years

Hand over your head.

« Reply #3 - Posted 2011-07-10 12:49:57 »

ImageIO will not convert the loaded image to be compatible with the graphics device.

Hi, appreciate more people! Σ ♥ = ¾
Learn how to award medals... and work your way up the social rankings!
Offline Cero
« Reply #4 - Posted 2011-07-10 13:22:52 »

private static BufferedImage toCompatibleImage(BufferedImage image)
          // obtain the current system graphical settings
         GraphicsConfiguration gfx_config = DisplayManager.getGraphicsConfiguration();
           * if image is already compatible and optimized for current system
           * settings, simply return it

          if (image.getColorModel().equals(gfx_config.getColorModel()))
              return image;
          // image is not optimized, so create a new image that is
          BufferedImage new_image = gfx_config.createCompatibleImage(image.getWidth(), image.getHeight(), image.getTransparency());
          // get the graphics context of the new image to draw the old image on
          Graphics2D g2d = (Graphics2D) new_image.getGraphics();
          // actually draw the image and dispose of context no longer needed
          g2d.drawImage(image, 0, 0, null);
          // return the new optimized image
          return new_image;

Note: DisplayManager.getGraphicsConfiguration(); is from my engine, you have to get your GraphicsConfiguration however else

So I have used this in the past; when loading an image from ImageIO I would pass it through this method.
I removed it and wrote this comment back then: "// Eats double RAM with no CPU performance improvement @ drawing whatsoever."

Also takes longer to load obviously.

I didn't test it thoroughly; but it didn't show any improvement, so I haven't used it ever in Java2D

Offline Riven

« JGO Overlord »

Medals: 1324
Projects: 4
Exp: 16 years

Hand over your head.

« Reply #5 - Posted 2011-07-10 13:28:15 »

Your images could already have been in a 'compatible' format in the file it was loaded from.

If they already are, you'll find no performance improvement in creating a new image with exactly the same format.

Hi, appreciate more people! Σ ♥ = ¾
Learn how to award medals... and work your way up the social rankings!
Offline Z-Man
« Reply #6 - Posted 2011-07-10 18:29:14 »

Thanks Riven and Cero, for answering my question.
Pages: [1]
  ignore  |  Print  

xxMrPHDxx (17 views)
2017-11-21 16:21:00

xxMrPHDxx (11 views)
2017-11-21 16:14:31

xxMrPHDxx (14 views)
2017-11-21 16:10:57

Ecumene (114 views)
2017-09-30 02:57:34

theagentd (148 views)
2017-09-26 18:23:31

cybrmynd (248 views)
2017-08-02 12:28:51

cybrmynd (247 views)
2017-08-02 12:19:43

cybrmynd (244 views)
2017-08-02 12:18:09

Sralse (258 views)
2017-07-25 17:13:48

Archive (878 views)
2017-04-27 17:45:51
List of Learning Resources
by elect
2017-03-13 14:05:44

List of Learning Resources
by elect
2017-03-13 14:04:45

SF/X Libraries
by philfrei
2017-03-02 08:45:19

SF/X Libraries
by philfrei
2017-03-02 08:44:05

SF/X Libraries
by SkyAphid
2017-03-02 06:38:56

SF/X Libraries
by SkyAphid
2017-03-02 06:38:32

SF/X Libraries
by SkyAphid
2017-03-02 06:38:05

SF/X Libraries
by SkyAphid
2017-03-02 06:37:51 is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!