Java-Gaming.org Hi !
Featured games (83)
games approved by the League of Dukes
Games in Showcase (539)
Games in Android Showcase (132)
games submitted by our members
Games in WIP (603)
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 2043 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 ImageIO.read() 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.

Thanks
-ZMan3359
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 ImageIO.read() 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 ImageIO.read() 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 ImageIO.read(). Then it creates a compatible image with createCompatibleImage(). Finally it copies the image read in by ImageIO.read() 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:
Quote
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
« League of Dukes »

« JGO Overlord »


Medals: 841
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
Offline Cero
« Reply #4 - Posted 2011-07-10 13:22:52 »

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
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()))
          {
              image.setAccelerationPriority(1.0f);
              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);
          g2d.dispose();
 
          new_image.setAccelerationPriority(1.0f);
 
          // 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
« League of Dukes »

« JGO Overlord »


Medals: 841
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
Offline Z-Man
« Reply #6 - Posted 2011-07-10 18:29:14 »

Thanks Riven and Cero, for answering my question.
Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

rwatson462 (33 views)
2014-12-15 09:26:44

Mr.CodeIt (23 views)
2014-12-14 19:50:38

BurntPizza (51 views)
2014-12-09 22:41:13

BurntPizza (84 views)
2014-12-08 04:46:31

JscottyBieshaar (45 views)
2014-12-05 12:39:02

SHC (59 views)
2014-12-03 16:27:13

CopyableCougar4 (59 views)
2014-11-29 21:32:03

toopeicgaming1999 (123 views)
2014-11-26 15:22:04

toopeicgaming1999 (114 views)
2014-11-26 15:20:36

toopeicgaming1999 (32 views)
2014-11-26 15:20:08
Resources for WIP games
by kpars
2014-12-18 10:26:14

Understanding relations between setOrigin, setScale and setPosition in libGdx
by mbabuskov
2014-10-09 22:35:00

Definite guide to supporting multiple device resolutions on Android (2014)
by mbabuskov
2014-10-02 22:36:02

List of Learning Resources
by Longor1996
2014-08-16 10:40:00

List of Learning Resources
by SilverTiger
2014-08-05 19:33:27

Resources for WIP games
by CogWheelz
2014-08-01 16:20:17

Resources for WIP games
by CogWheelz
2014-08-01 16:19:50

List of Learning Resources
by SilverTiger
2014-07-31 16:29:50
java-gaming.org 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‑gaming.org
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!