Generating Image

Hi all,

I’m looking for an easy way to generate an image by getting a clip from a different one, as with say a sprite sheet or a bitmap font. Using separate files has been alright (albeit annoying and wasteful) for sprites, but I’m not having 24 pics for every font & size combination I want to use.

Anyways my ingenious plan was:

  1. Load BufferedImage
  2. getGraphics() and clip
  3. Profit!!!

Unfortunately, I can’t seem to find anything obvious to throw into 3. After hunting through Rasters and such for hours with no apparent success (I don’t doubt I missed something though), I thought it would probably be better to bug someone for a few minutes of their time rather than pull my hair out/toss the laptop out the window/etc.

Thanks

P.S. Please don’t say drawString(); I’m not that retarded. I’m using LWJGL and for unknown reasons the NeHe tutorial code and the Slick utility class don’t like me =( , lol (by which of course I mean I’m screwing stuff up and am too unfamiliar to deal with it).

P.P.S. Ok, last question. Even though I’m not using Java2D anymore, I’ve alway been curious if clipping the graphics context created a speed boost (say if I were drawing 500 images outside of the clip).

Something like this, perhaps?

BufferedImage sheet = loadSheet();
for (int x=0; x<xCount; x++)
  for (int y=0; y<yCount; y++)
  {
      BufferedImage clippedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
      Graphics g = clippedImage.getGraphics();
      g.drawImage(sheet, -x*width, -y*height);
      g.dispose();
      storeClippedImageSomehow(clippedImage, x, y);
  }

doesn’t BufferedImage.getSubimage() do what you want?

@ Markus_Persson
Oh, that’s a great idea! I was trying to go at it backwards (trying to clip the sheet, move what i clipped to [0,0], and then draw) so I completely didn’t see that I could draw the entire sheet to the new image in such a way that the new image would clip it to what I wanted. I gotta start learning to see a problem from different angles at once; I’ve had that kind of problem before. However…

@ cylab
:o :o :o Where did that come from?!?!? lol, I swear I scrolled through the BufferedImage documentation specifically looking for methods that return BufferedImage and didn’t see one. I guess I missed it :-. Argh, that was a complete waste people’s time then.

Thanks guys, although I feel retarded that I didn’t come up with either of those on my own…

Yeah, that’s probably a much better alternative.

I keep forgetting getSubImage exists. Heh.

One thing you got to watch out for is that the returned image shares its data with it’s parent. So you can’t create 4 sub images of the same region and draw different stuff on each. You’ll end up with 4 equal (messed up) sub images.