public void Rotate(int angle) { var viewPerspective = this.ViewPerspective; viewPerspective = DocumentImages.RotateViewPerspective(viewPerspective, angle); this.ViewPerspective = viewPerspective; }
private static RasterViewPerspective RotateViewPerspective90(RasterViewPerspective value) { switch (value) { case RasterViewPerspective.TopLeft: return(RasterViewPerspective.TopLeft90); case RasterViewPerspective.TopLeft90: return(RasterViewPerspective.TopLeft180); case RasterViewPerspective.TopLeft180: return(RasterViewPerspective.TopLeft270); case RasterViewPerspective.TopLeft270: return(RasterViewPerspective.TopLeft); case RasterViewPerspective.BottomLeft: return(RasterViewPerspective.BottomLeft90); case RasterViewPerspective.BottomLeft90: return(RasterViewPerspective.BottomLeft180); case RasterViewPerspective.BottomLeft180: return(RasterViewPerspective.BottomLeft270); case RasterViewPerspective.BottomLeft270: return(RasterViewPerspective.BottomLeft); default: return(value); } }
public void Flip() { var viewPerspective = this.ViewPerspective; viewPerspective = DocumentImages.FlipViewPerspective(viewPerspective); this.ViewPerspective = viewPerspective; }
public void Reverse() { var viewPerspective = this.ViewPerspective; viewPerspective = DocumentImages.ReverseViewPerspective(viewPerspective); this.ViewPerspective = viewPerspective; }
private static string GetViewPerspectiveName(RasterViewPerspective value) { switch (value) { case RasterViewPerspective.TopRight: return("TopRight"); case RasterViewPerspective.BottomRight: return("BottomRight"); case RasterViewPerspective.BottomLeft: return("BottomLeft"); case RasterViewPerspective.LeftTop: return("LeftTop"); case RasterViewPerspective.RightTop: return("RightTop"); case RasterViewPerspective.RightBottom: return("RightBottom"); case RasterViewPerspective.LeftBottom: return("LeftBottom"); case RasterViewPerspective.TopLeft: default: return("TopLeft"); } }
public static RasterViewPerspective FlipViewPerspective(RasterViewPerspective value) { switch (value) { case RasterViewPerspective.TopLeft: value = RasterViewPerspective.BottomLeft; break; case RasterViewPerspective.BottomLeft: value = RasterViewPerspective.TopLeft; break; case RasterViewPerspective.TopRight: value = RasterViewPerspective.BottomRight; break; case RasterViewPerspective.BottomRight: value = RasterViewPerspective.TopRight; break; case RasterViewPerspective.LeftTop: value = RasterViewPerspective.LeftBottom; break; case RasterViewPerspective.LeftBottom: value = RasterViewPerspective.LeftTop; break; case RasterViewPerspective.RightTop: value = RasterViewPerspective.RightBottom; break; case RasterViewPerspective.RightBottom: value = RasterViewPerspective.RightTop; break; } return(value); }
private static string GetRasterViewPerspectiveName(RasterViewPerspective value) { switch (value) { case RasterViewPerspective.TopLeft: return("TopLeft"); case RasterViewPerspective.TopRight: return("TopRight"); case RasterViewPerspective.BottomRight: return("BottomRight"); case RasterViewPerspective.BottomLeft: return("BottomLeft"); case RasterViewPerspective.LeftTop: return("LeftTop"); case RasterViewPerspective.RightTop: return("RightTop"); case RasterViewPerspective.RightBottom: return("RightBottom"); case RasterViewPerspective.LeftBottom: return("LeftBottom"); default: throw new ArgumentException("Invalid view perspective"); } }
public static RasterViewPerspective RotateViewPerspective(RasterViewPerspective value, int angle) { while (angle < 0) { angle += 360; } while (angle >= 360) { angle -= 360; } switch (angle) { case 0: break; case 270: value = RotateViewPerspective90(value); // and fall through goto case 180; case 180: value = RotateViewPerspective90(value); // and fall through goto case 90; case 90: value = RotateViewPerspective90(value); break; default: throw new ArgumentException("Must be in increment of 90 degrees", "angle"); } return(value); }
// Helper method to get the view perspective transformation if the viewer is rotated or flipped private Matrix GetViewPerspectiveTransform(RasterViewPerspective viewPerspective, bool useDpi, int imageWidth, int imageHeight) { Matrix matrix = new Matrix(); int scaleX = 1; int scaleY = 1; int angle = 0; int translateX = 0; int translateY = 0; switch (viewPerspective) { case RasterViewPerspective.TopLeft: // None break; case RasterViewPerspective.BottomLeft180: // H //case RasterViewPerspective.TopRight: scaleX = -1; translateX = imageWidth; break; case RasterViewPerspective.TopLeft180: // HV R180 //case RasterViewPerspective.BottomRight: // HV R180 scaleX = -1; scaleY = -1; translateX = imageWidth; translateY = imageHeight; break; case RasterViewPerspective.BottomLeft: // V scaleY = -1; translateY = imageHeight; break; case RasterViewPerspective.BottomLeft90: // V R90 Done //case RasterViewPerspective.LeftTop: scaleY = -1; angle = 90; break; case RasterViewPerspective.BottomLeft270: // R90 //case RasterViewPerspective.RightBottom: // R90 scaleY = -1; angle = 270; translateX = imageWidth; translateY = imageHeight; break; case RasterViewPerspective.TopLeft90: // R90 //case RasterViewPerspective.RightTop: // R90 angle = 90; translateX = imageWidth; break; case RasterViewPerspective.TopLeft270: // R270 //case RasterViewPerspective.LeftBottom: angle = 270; translateY = imageHeight; break; } float ratioX = 1; float ratioY = 1; if (UseDpi) { ratioX = (float)(96.0 / ImageDpiX); ratioY = (float)(96.0 / ImageDpiY); } if (scaleX != 1 || scaleY != 1 || angle != 0) { matrix.Translate(translateX * ratioX, translateY * ratioX); matrix.Rotate(angle); matrix.Scale(scaleX, scaleY); } return(new Matrix()); }
public ViewPerspectiveItem(RasterViewPerspective viewPerspective, string friendlyName) { ViewPerspective = viewPerspective; FriendlyName = friendlyName; }
internal static DocumentRotateFlip GetRotateFlip(RasterViewPerspective srcViewPerspective, RasterViewPerspective destViewPerspective) { bool srcFlip = false; bool srcReversed = false; bool destFlip = false; int angle = 0; switch (srcViewPerspective) { case RasterViewPerspective.TopLeft: break; case RasterViewPerspective.TopLeft90: angle = 90; break; case RasterViewPerspective.TopLeft180: angle = 180; break; case RasterViewPerspective.TopLeft270: angle = 270; break; case RasterViewPerspective.BottomLeft: srcFlip = true; break; case RasterViewPerspective.BottomLeft90: //sb: I prefer Flip to Reverse, since it is faster with any BPP (especially 2-7) srcFlip = true; angle = 90; break; case RasterViewPerspective.BottomLeft180: srcReversed = true; break; case RasterViewPerspective.BottomLeft270: srcFlip = true; angle = 270; break; default: break; } // now from RasterViewPerspective.TopLeft to ViewPerspective switch (destViewPerspective) { case RasterViewPerspective.TopLeft: break; case RasterViewPerspective.TopLeft90: angle -= 90; break; case RasterViewPerspective.TopLeft180: angle -= 180; break; case RasterViewPerspective.TopLeft270: angle -= 270; break; case RasterViewPerspective.BottomLeft: destFlip = true; break; case RasterViewPerspective.BottomLeft90: angle -= 90; destFlip = true; break; case RasterViewPerspective.BottomLeft180: destFlip = true; angle -= 180; break; case RasterViewPerspective.BottomLeft270: destFlip = true; angle -= 270; break; default: break; } // Now I want to have bDstFlip and bDstRev to be false, so I want to reduce the // situation to have a Flip or a reverse and then a rotate // A destination flip is equivalent to a source flip and a rotation in the opposite direction if (destFlip) { destFlip = false; srcFlip = !srcFlip; angle = -angle; } // at this moment, we have no destination flip nor reverse. if (srcFlip && srcReversed) { srcFlip = srcReversed = false; angle += 180; } if (srcReversed) {// in this case, srcFlip must be false srcFlip = true; angle -= 180; srcReversed = false; } if (angle < 0) { angle += 360; } else if (angle >= 360) { angle -= 360; } return(new DocumentRotateFlip { IsFlipped = srcFlip, RotationAngle = angle }); }
/// <summary> /// Called when compressed data is available /// </summary> bool MyCodecsCompressDataCallback(int width, int height, int bitsPerPixel, RasterByteOrder order, RasterViewPerspective viewPerspective, RasterNativeBuffer buffer) { // Write compressed data to the file byte[] dataBuffer = new byte[(int)buffer.Length]; Marshal.Copy(buffer.Data, dataBuffer, 0, (int)buffer.Length); outputFile.Write(dataBuffer, 0, (int)buffer.Length); return(true); }