Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #31900

Re: Image rotation part 2

From Eric Sosman <esosman@comcast-dot-net.invalid>
Newsgroups comp.lang.java.programmer
Subject Re: Image rotation part 2
Date 2015-06-30 16:20 -0400
Organization A noiseless patient Spider
Message-ID <mmutjf$hcb$1@dont-email.me> (permalink)
References <mmuhle$gp1$1@dont-email.me> <mmulii$b3u$1@dont-email.me> <mmusni$m87$1@dont-email.me>

Show all headers | View raw


On 6/30/2015 4:04 PM, Martin Gregorie wrote:
> On Tue, 30 Jun 2015 14:03:17 -0400, Eric Sosman wrote:
>
>> On 6/30/2015 12:55 PM, Martin Gregorie wrote:
>>> [...]I'm again thinking about somehow standing the character string on
>>> end by rotating it through 90 degrees. I'm successfully creating a JPG
>>> image containing black 10 pt Monospaced text on a LIGHT_GRAY background
>>> within a minimal window (20 pixels high and s.length() * (fontsize * 7
>>> / 10) wide, whenever I try to rotate it, all I'm getting is a solid
>>> black image thats rotated so its longest dimension is now vertical.
>>>
>>> The code looks like this:
>>>
>>>      BufferedImage im = new BufferedImage(width,
>>>                                           height,
>>>                                           BufferedImage.TYPE_INT_RGB);
>>>
>>>      // image created in im
>>>
>>>      BufferedImage om = new BufferedImage(height,
>>>                                           width,
>>>                                           BufferedImage.TYPE_INT_RGB);
>>>      AffineTransform at = new AffineTransform();
>>>
>>
>>       This may be the problem: You're rotating the image a quarter-turn,
>> but not moving the origin.  I think that means you're rotating the
>> "payload" pixels clear out of the area that then fills the destination.
>> (Think about a closed door: After rotating it a quarter-turn about its
>> hinges, how much of the rotated door remains within the doorframe?)
>
> If I understand correctly that implies a one line change, replacing
>
>     at.setToQuadrantRotation(-1);
>
> with
>
>     at.setToQuadrantRotation(direction,
>                              new Double(width/2),
>                              new Double(height/2));
>
> which, sadly just produced another solid black image.
> Is there a decent tutorial anywhere about using Affine transforms? I'm
> pretty much out of my depth when it comes to this sort of thing.

     I've used them a few times, but find them confusing -- in part
because the Y axis is inverted from The Way We Learned In School, which
is The Way I Always Picture It In My Foggy Little Brain.  Basically,
though, I think the best way to build the transform you want is to
compose it out of simpler steps.  In your case, the steps would be

	1) Translate the center of your image to the origin,
	2) Rotate the image a quarter-turn (rotation about the
	   origin is now rotation about the image's center),
	3) Translate the origin to the center of the new image.

You can build these three transforms (it would take me a few tries to
get the translations right; see Y axis, above) and combine them into a
single transform (it would take me a few tries to get the order right;
matrix multiplication is not commutative but at least you know that the
rotation step is in the middle), and then apply the combined super-
transform to your image.

     Applying your transform to a (non-square) Rectangle and simply
printing the original and transformed coordinates might help debug.
Good luck!

-- 
esosman@comcast-dot-net.invalid
"Don't be afraid of work. Make work afraid of you." -- TLM

Back to comp.lang.java.programmer | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread


Thread

Image rotation part 2 Martin Gregorie <martin@address-in-sig.invalid> - 2015-06-30 16:55 +0000
  Re: Image rotation part 2 Eric Sosman <esosman@comcast-dot-net.invalid> - 2015-06-30 14:03 -0400
    Re: Image rotation part 2 Martin Gregorie <martin@address-in-sig.invalid> - 2015-06-30 20:04 +0000
      Re: Image rotation part 2 Eric Sosman <esosman@comcast-dot-net.invalid> - 2015-06-30 16:20 -0400
        Re: Image rotation part 2 Martin Gregorie <martin@address-in-sig.invalid> - 2015-06-30 20:52 +0000
  Re: Image rotation part 2 e.d.programmer@gmail.com - 2015-06-30 12:07 -0700
  Re: Image rotation part 2 Martin Gregorie <martin@address-in-sig.invalid> - 2015-06-30 20:18 +0000
  Re: Image rotation part 2 Jeff Higgins <jeff@invalid.invalid> - 2015-06-30 19:04 -0400
    Re: Image rotation part 2 Knute Johnson <nospam@rabbitbrush.frazmtn.com> - 2015-06-30 16:36 -0700
      Re: Image rotation part 2 Jeff Higgins <jeff@invalid.invalid> - 2015-06-30 20:17 -0400
    Re: Image rotation part 2 Jeff Higgins <jeff@invalid.invalid> - 2015-06-30 20:09 -0400
    Re: Image rotation part 2 e.d.programmer@gmail.com - 2015-07-01 06:06 -0700
      Re: Image rotation part 2 FredK <fred.l.kleinschmidt@gmail.com> - 2015-07-01 10:57 -0700
      Re: Image rotation part 2 Jeff Higgins <jeff@invalid.invalid> - 2015-07-01 18:13 -0400
      Re: Image rotation part 2 Arne Vajhøj <arne@vajhoej.dk> - 2015-07-27 22:28 -0400
        Re: Image rotation part 2 e.d.programmer@gmail.com - 2015-07-28 04:58 -0700
          Re: Image rotation part 2 Arne Vajhøj <arne@vajhoej.dk> - 2015-07-28 18:58 -0400
            Re: Image rotation part 2 e.d.programmer@gmail.com - 2015-07-29 05:35 -0700

csiph-web