Solved

(fast!) 2D rotation and scaling for grayscale bitmaps

Posted on 1998-05-07
11
566 Views
Last Modified: 2010-05-18
I need  source code (DELPHI or C) to implement a rather fast method to rotate a grayscale image about small angles (+-3 degrees) and scale it down using antialias. Have found nothing acceptable yet
0
Comment
Question by:arnoldu
  • 3
  • 3
  • 3
  • +2
11 Comments
 
LVL 4

Expert Comment

by:jbrugman
ID: 1112620
a method to rotate an image on the web, i would use JavaScript. The images are rotated already with a tool like Photoshop.
Rotating can be done with the following script:
<SCRIPT LANGUAGE="JavaScript">

 if (document.images != null) {
     single0 = new Image();single0.src  = "images/aboutstar_0.gif";
     single1 = new Image();single1.src  = "images/aboutstar_1.gif";
     single2 = new Image();single2.src  = "images/aboutstar_2.gif";
     single3 = new Image();single3.src  = "images/aboutstar_3.gif";
     single4 = new Image();single4.src  = "images/aboutstar_4.gif";
     single5 = new Image();single5.src  = "images/aboutstar_5.gif";
     single6 = new Image();single6.src  = "images/aboutstar_6.gif";
     single7 = new Image();single7.src  = "images/aboutstar_7.gif";
     single8 = new Image();single8.src  = "images/aboutstar_8.gif";
     
     var singleI = 0, singleInTimeout = singleOutTimeout = null;
 }


 function fadeInabout() {
     if (document.images != null && singleI < 8) {
         document.images['single'].src = eval('single' + (++singleI) + ".src");
         singleInTimeout = setTimeout('fadeInabout()',60);
     }
 }

function thisfirst() {
   if (singleI >= 8) {
       singleI=0
   }
   clearTimeout(singleInTimeout);
}

</SCRIPT>
<BODY>

<IMG SRC="images/aboutstar_0.gif" NAME="single" BORDER="0">
<BR><BR>
<A HREF="pagina_01.html" TARGET="Right" onMouseover=thisfirst();fadeInabout()>  
About Star</A>

0
 

Author Comment

by:arnoldu
ID: 1112621
This is a wonderful idea - if rotating images on the web had been the actual question. I obtain images from the scanner and have to correct misalignments etc. and rotate them by small angles (e.g. 0.3 °)
0
 
LVL 4

Expert Comment

by:jbrugman
ID: 1112622
Why don't u use a tool like Photoshop or a shareware program like paintshop pro then?
0
Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

 

Author Comment

by:arnoldu
ID: 1112623
Because I dont have them statically ! My application scans images using a self-written twain interface and I need a kind of preprocessor within my own program to correct for smaller misalignment errrors.

0
 
LVL 4

Expert Comment

by:jbrugman
ID: 1112624
Perhaps it is an idea to post the question in another place then, like in programming C / C++
Good luck!
0
 
LVL 84

Expert Comment

by:ozo
ID: 1112625
how about composing sheer transforms?
0
 

Author Comment

by:arnoldu
ID: 1112626
Good idea - but how to implement them with interpolation?
0
 
LVL 84

Expert Comment

by:ozo
ID: 1112627
I found this reference in
http://www.cis.ohio-state.edu/hypertext/faq/usenet/graphics/algorithms-faq/faq.html
Subject 3.01: How do I rotate a bitmap?

    The easiest way, according to the comp.graphics faq, is to take
    the rotation transformation and invert it. Then you just iterate
    over the destination image, apply this inverse transformation and
    find which source pixel to copy there.

    A much nicer way comes from the observation that the rotation
    matrix:

        R(T) = { { cos(T), -sin(T) }, { sin(T), cos(T) } }

    is formed my multiplying three matrices, namely:

        R(T) = M1(T) * M2(T) * M3(T)

    where

        M1(T) = { { 1, -tan(T/2) },
                  { 0, 1         } }
        M2(T) = { { 1,      0    },
                  { sin(T), 1    } }
        M3(T) = { { 1, -tan(T/2) },
                  { 0,         1 } }

    Each transformation can be performed in a separate pass, and
    because these transformations are either row-preserving or
    column-preserving, anti-aliasing is quite easy.

    Reference:

    Paeth, A. W., "A Fast Algorithm for General Raster Rotation",
    Proceedings Graphics Interface '89, Canadian Information
    Processing Society, 1986, 77-81
    [Note - e-mail copies of this paper are no longer available]

    [Gems I]
...
[Gems I]
    Graphics Gems,
    Andrew Glassner (ed.), Academic Press 1990, ISBN 0-12-286165-5

0
 
LVL 1

Expert Comment

by:mrausch
ID: 1112628
You could quite easily enlarge a "working window" on the
original picture, skew this according to the angle you want to
rotate and scale it down to the desired size. Antialiasing can
be done in this last step without problems.

0
 
LVL 84

Expert Comment

by:ozo
ID: 1112629
I happen to have the Graphics Gems article with me now.
It's too long (and too copyrighted) to type in here, but for the next week or so (until the owner of the book wants it back)
I may be able to answer any furthur questions you have on it.
The article also compares a similar technique  that does a 2 pass simultaneous shear and scale.
A.R. Smith (1987) "Planar 2-Pass Texture Mapping and Warping"
ACM Computer Graphics (SIGGRAPH). 21(4), 263-272.
(A Fast Algorithm for General Raster Rotation)
0
 

Accepted Solution

by:
hlava earned 200 total points
ID: 1112630
try write for each pixel code like(in math):

xx=xb*cos(alfa)-yb*sin(alfa)
yy=xb*sin(alfa)+yb*cos(alfa)

xx-result x
yy-result y
xb-start x
yb-start y
alfa-angle

if you can use rotation about one point you must get this point to 0,0 and then rotate

shifting code(math):
xx=xb+xshift
yy=yb+yshift

good luck!!

                                 HEAD
0

Featured Post

Master Your Team's Linux and Cloud Stack

Come see why top tech companies like Mailchimp and Media Temple use Linux Academy to build their employee training programs.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Animation / Modelling 8 96
Free stock image website 3 114
Prototype / Wireframe App 3 131
File conversion question 5 105
Keep your audience engaged and get the most out of your next presentation with these quick Prezi tips.
Technology opened people to different means of presenting information, but PowerPoint remains to be above competition. Know why PPT still works today.
HTML5 has deprecated a few of the older ways of showing media as well as offering up a new way to create games and animations. Audio, video, and canvas are just a few of the adjustments made between XHTML and HTML5. As we learned in our last micr…
Not only does Prezi allow you to create non-linear presentations, it also makes it easy to apply transition animations between your frames. Learn how to apply a fade-in transition to select items and entire frames in this tutorial Select "Edit Path"…

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question