12,074,441 members (61,196 online)
Rate this:
See more:
Hi,

I am working on GDI+ for the first time.

Can anyone please tell me how to rotate the image at a point and then translate it towards x(left-right) and y(top-bottom) however the rotation is.

Rotation and translation points keep on changes on key press.

Posted 20-Nov-12 1:26am

Rate this:

## Solution 1

JackDingler 20-Nov-12 11:07am

That modifies the image. It looked to me like the question was on drawing the image at arbitrary rotations and coordinates.

Is there a way with GDI+ to rotate an image 15 degrees and offset it by (30, 40) for display?
rswapna28 21-Nov-12 1:32am

Yes there are API's to rotate and translate but both together are not working fine. So I thought I will get help :)
Richard MacCutchan 21-Nov-12 3:24am

Help with what? You need to provide more details of your problem. Use the "Improve Question" link and try to explain exactly what you are trying to do and why it is not working.
Rate this:

## Solution 2

That's actually a complicated question with a lot of parts.

GDI+ is a difficult platform for implementing this on, since it doesn't recognize textures, vectors or meshes.

1. Rotate and translate the four corners of the image.
2. Loop through the image reading the pixels.
a. In the outer loop, iterator the rows.
b. In the inner loop iterate the columns.
c. Do the same for the pixel positions for the drawing image.
3. Write the pixels to the GDI+ DC.

Now this is slow. But you have two major areas for optimizations here.

1. There are optimizations and many line drawing algorithms for tracing the pixels of the output image. But most share a common quality. They calculate the coordinates in an indirect fashion. These techniques fill up chapters in books.

2. Make a second memory image that is big enough to hold the entire rotated image and write this, instead of the DC. Then bitblt it to the DC when done.
rswapna28 21-Nov-12 1:37am

GDI+ is a library which is created on top of GDI. It is a 2D graphics library. So I can load any image and do rotate, translate and many more operations on it. I dont have to apply as a texture as OpenGL does and pixel tracing is also not needed.

My problem is, I could not rotate and translate the local coordinates together.
JackDingler 21-Nov-12 9:42am

The translation is a matter of specifying where you want the image drawn. It's the X,Y coordinates you specify on the destination DC.

The only rotation I see in the current library, rotates the image in 90 degree increments. Is there another function for this?

rswapna28 22-Nov-12 0:50am

RotateTransform will rotate the image in any angle. But the issue i am facing is.
I want to rotate the image in point so I am translating my axis to that point and then rotate and translate back again.
eg.,
graphics.translateTransform(x, y);
graphics.rotateTransform(angle);
graphics.translateTransform(-x, -y);

Now I want my image move towards left. so I used translateTransform to move. But As my image has rotated to some angle so my movement instead global left movement, it is local left movement.

I hope I am clear.
JackDingler 22-Nov-12 11:26am

Rate this:

## Solution 3

1) You may use Affine Transformation for this kind of processing.

http://en.wikipedia.org/wiki/Affine_transformation[^]

2) I think it is better to use some free third party as well:
rswapna28 22-Nov-12 0:55am

Thanks for the help.

I dont know how to go about the Affine transformation but I have applied Eulers method. And the third party library you have given is for .NET project. But mine is VC++.

Top Experts
Last 24hrsThis month
 OriginalGriff 472 Dave Kreskowiak 260 ProgramFOX 260 CPallini 210 CHill60 160
 Dave Kreskowiak 2,711 OriginalGriff 2,463 Richard MacCutchan 1,725 CPallini 1,507 CHill60 1,379