Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsFree MagazinesWhite PapersSubmit Content
Discussion GroupsASP.NETWindows FormsLanguages.NET FrameworkVisual Studio.NET
Articles.NET FrameworkASP.NETToolsWindows Forms
.NET DirectoryOpen Source ProjectsUser GroupsWeb Resources
Related Topics
Visual Basic 6SQL ServerMS AccessOther DB ProductsMS Server ProductsMore Topics ...

.NET Forum / Windows Forms / WinForm General / January 2007

Tip: Looking for answers? Try searching our database.

Non-proportional (non Rectangular) resizing

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
GraGra33 - 26 Jan 2007 10:47 GMT
Hi all...

I have developed an application for managing a very large resource of
artist's paintings and posts them to a web site. The application works well.
I'm trying to reduce the complexity of having to work with photoshop and
integrate one feature into the application > Distortion Transformations.

Background Information:

When paintings are photographed, it's impossible to get a completely perfect
image that requires straightening prior to cropping for a number of rasons -
the photographer is not standing square on to the painting, the painting is
leaning, the camera is not at the correct height,  the camera causes barrel
distortion, etc...

Therefore each image must be loaded into photoshop, all 4 corners selected
using the polygonal lasso tool then manually applying a Distort
Transformation (Edit > Transform > Distort) on the selected region.

The Problem:

The GDI library comes standard with several rectangular transformations -
stretch, Skew, etc.. But these apply only to a perfect rectangular region
where all points are perpendicular to each other.

I have no problems in selecting the non-rectangular region - this is easy.
I'm stumped at trying to work out how to take this region and applying the
Photoshop like Distort Transformation.

Anyone have any pointers?

Thanks in advance...

Graeme
Kevin Spencer - 26 Jan 2007 11:50 GMT
Transformations are all done using Matrix math. This is not going to be an
easy task, because you will have to understand Matrix math to do it. Here
are some articles and sample code to get you started:

http://www.bobpowell.net/transformations.htm
http://www.codeproject.com/csharp/matrix_transformation.asp
http://www.euclideanspace.com/maths/algebra/matrix/arithmetic/index.htm
http://www.euclideanspace.com/maths/algebra/matrix/code/sftranslation_csharp.htm

Signature

HTH,

Kevin Spencer
Microsoft MVP
Software Composer
http://unclechutney.blogspot.com

The shortest distance between 2 points is a curve.

> Hi all...
>
[quoted text clipped - 35 lines]
>
> Graeme
GraGra33 - 26 Jan 2007 22:44 GMT
Hi...

Thanks for your suggestions - I've had a look at all the links mentioned.
Bob's and the CodeProject artile I've already looked at both and they deal
with rectangular regions (simple transformation) and not 4-point polygons
(complex transformation).

I've also looked at Gimp and Paint.Net - both only deal with regions (simple
transformation)  and don't have Photoshop's distort transformation (complex
transformation).

I'm trying to do 4-point polygons (complex transformation) and not
rectangular regions (simple transformation). The GDI+ matrix transformations
only handle rectangular regions (simple transformation) as far as I can
ascertain.

To clarify what I'm trying to do, I'll give you another example - can send
you a sample image if you think that you know how it's done.

Example: The bottom-left and top-right corners are not squared to the
Top-left & bottom-right corners. To square the image, the top-left and
bottom-right must stay anchored whilst the bottom-left must be distorted
towards the top and the top-right corner must be distorted to the right.

Be aware that no two photos are the same and each photo will require
different distort transformation adjustments.

Do you still think that your suggestion will work or do you have another
idea?

Thanks for your help in advance,

Graeme

> Transformations are all done using Matrix math. This is not going to be an
> easy task, because you will have to understand Matrix math to do it. Here
[quoted text clipped - 47 lines]
>>
>> Graeme
Kevin Spencer - 26 Jan 2007 23:01 GMT
Yes, I have a good understanding of what you're trying to do. The Bob Powell
and CodeProject references were just for the purpose of general information
about Matrices. The other 2 references are more specific, one of which goes
well into the mathematics, and one of which provides some samples of C#
Matrix math algorithms, although you will still have to create your own
matrices to do the work. But it WILL involve using Matrix transformation,
and you will have to figure out the Math.

Signature

HTH,

Kevin Spencer
Microsoft MVP
Software Composer
http://unclechutney.blogspot.com

The shortest distance between 2 points is a curve.

> Hi...
>
[quoted text clipped - 83 lines]
>>>
>>> Graeme
GraGra33 - 26 Jan 2007 23:13 GMT
Thanks for the quick response Kevin.

I've had a good look at GDI+ and Matricies through alot of hand coding and
all I get are simple transformations. I fail to see how GDI+ can handle
complex transformations other than rectangular regions.

Kind Regards,

Graeme

> Yes, I have a good understanding of what you're trying to do. The Bob
> Powell and CodeProject references were just for the purpose of general
[quoted text clipped - 93 lines]
>>>>
>>>> Graeme
Kevin Spencer - 29 Jan 2007 14:44 GMT
My point was not about GDI+ as such, but that you need to use Matrix math to
do your transform. In fact, the DirectX library has a matrix class that has
quite a bit of functionality built in, and is completely configurable, which
may be useful to you, or provide you with the knowledge you need to do your
transform. I might mention that what you need is not an affine transform,
which does not provide distortion. What you need to understand is that a
matrix provides a vector-based translation method, so what you need to do is
an orthagonal transform, to change the angle of the corners of your
rectangle. See
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_m/dire
ctx/ref/ns/microsoft.directx/s/matrix/matrix.asp
.

Signature

HTH,

Kevin Spencer
Microsoft MVP
Software Composer
http://unclechutney.blogspot.com

The shortest distance between 2 points is a curve.

> Thanks for the quick response Kevin.
>
[quoted text clipped - 103 lines]
>>>>>
>>>>> Graeme

Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.