?
Solved

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

Posted on 1998-05-07
11
Medium Priority
?
592 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
Important Lessons on Recovering from Petya

In their most recent webinar, Skyport Systems explores ways to isolate and protect critical databases to keep the core of your company safe from harm.

 

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 85

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 85

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 85

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 400 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

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Question has a verified solution.

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

Keep your audience engaged and get the most out of your next presentation with these quick Prezi tips.
Many programs have tried to outwit PowerPoint in terms of technology and skill. These programs, however, still lack several characteristics that PowerPoint has possessed from the start. Here's why PowerPoint replacements won't entirely work for desi…
In this Micro Tutorial viewers will learn the basic shortcuts and functions in InDesign.
Learn how to download your full Prezi presentation for offline presenting. Prezi doesn’t have to be viewed and shared in a web browser, even with a free account you can download your full presentation to share with others. Be sure to download any vi…
Suggested Courses
Course of the Month16 days, 3 hours left to enroll

850 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