HOWTO: Rotate Annotations Along With a Background Image on a WebAnnotationViewer (Legacy Web Controls)


Legacy Controls NOTICE

This article references our legacy Web Forms Web Viewing controls (WebImageViewer, WebAnnotationViewer, WebThumbnailViewer). It is preserved for archival purposes, but support strongly recommends using our modern HTML5 web controls: WebDocumentViewer, WebDocumentThumbnailer instead)

INFO: WebDocumentViewer Whitepaper - Getting Started With Web Viewing

Main Article Content

For each annotation you need to:

  • recalculate the new upper left X,Y Value
  • rotate the annotation
  • move the annotation to the new position.

Server Side

C#

[RemoteInvokable]
public void RotateEverything(int degs)
{
 
    foreach (AnnotationUI anno in WebImageViewer1.Annotations.CurrentLayer.Items)
    {

 //Move it
 if (degs == 90)
 {
     float newX =(float)(WebImageViewer1.Image.Height) - anno.Location.Y;
     float newY = anno.Location.X;
     anno.Rotate(90);
     anno.Location = new PointF(newX, newY);
 }
 else if (degs == -90)
 {
     float newX = anno.Location.Y; 
     float newY = (float)(WebImageViewer1.Image.Width) - anno.Location.X;
     anno.Rotate(-90);
     anno.Location = new PointF(newX, newY);
 }
 else if (degs == 180)
 {
     float newX = (float)(WebImageViewer1.Image.Width) - anno.Location.X; 
     float newY = (float)(WebImageViewer1.Image.Height) - anno.Location.Y; 
     anno.Rotate(180);
     anno.Location = new PointF(newX, newY);
 }
    }
   

    this.WebImageViewer1.UpdateAnnotations();
    this.WebImageViewer1.ApplyCommand(new RotateCommand(degs));
    this.WebImageViewer1.Image.Save(@"C:\Tempfile.jpg", new JpegEncoder(), null);

}

VB.NET

 _
Public Sub RotateEverything(ByVal degs As Integer)
   
    For Each anno As AnnotationUI In WebImageViewer1.Annotations.CurrentLayer.Items       
        'Move it
        If degs = 90 Then
            Dim newX As Single = CSng(DirectCast(-anno.Location.Y, WebImageViewer1.Image.Height))
            Dim newY As Single = anno.Location.X
            anno.Rotate(90)
            anno.Location = New PointF(newX, newY)
ElseIf degs = -90 Then
            Dim newX As Single = anno.Location.Y
            Dim newY As Single = CSng(DirectCast(-anno.Location.X, WebImageViewer1.Image.Width))
            anno.Rotate(-90)
            anno.Location = New PointF(newX, newY)
ElseIf degs = 180 Then
            Dim newX As Single = CSng(DirectCast(-anno.Location.X, WebImageViewer1.Image.Width))
            Dim newY As Single = CSng(DirectCast(-anno.Location.Y, WebImageViewer1.Image.Height))
            anno.Rotate(180)
            anno.Location = New PointF(newX, newY)
        End If
    Next
   
    Me.WebImageViewer1.UpdateAnnotations()
    Me.WebImageViewer1.ApplyCommand(New RotateCommand(degs))
    Me.WebImageViewer1.Image.Save("C:\Tempfile.jpg", New JpegEncoder(), Nothing)
   
End Sub

Client Side

JavaScript

function Rotate(i) {
 var a = new Array();
 a.push(i);
 WebImageViewer1.RemoteInvoked = Invalidate;
 WebImageViewer1.RemoteInvoke('RotateEverything', a);
}

Original Article:
Q10199 - HOWTO: Rotate Annotations Along With a Background Image on a WebAnnotationViewer (Legacy Web Controls)