コード例 #1
0
        public void Rotate(int angle)
        {
            var viewPerspective = this.ViewPerspective;

            viewPerspective      = DocumentImages.RotateViewPerspective(viewPerspective, angle);
            this.ViewPerspective = viewPerspective;
        }
コード例 #2
0
        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);
            }
        }
コード例 #3
0
        public void Flip()
        {
            var viewPerspective = this.ViewPerspective;

            viewPerspective      = DocumentImages.FlipViewPerspective(viewPerspective);
            this.ViewPerspective = viewPerspective;
        }
コード例 #4
0
        public void Reverse()
        {
            var viewPerspective = this.ViewPerspective;

            viewPerspective      = DocumentImages.ReverseViewPerspective(viewPerspective);
            this.ViewPerspective = viewPerspective;
        }
コード例 #5
0
        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");
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
0
ファイル: MainForm.cs プロジェクト: sakpung/webstudy
        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");
            }
        }
コード例 #8
0
        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);
        }
コード例 #9
0
        // 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());
        }
コード例 #10
0
 public ViewPerspectiveItem(RasterViewPerspective viewPerspective, string friendlyName)
 {
     ViewPerspective = viewPerspective;
     FriendlyName    = friendlyName;
 }
コード例 #11
0
        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
            });
        }
コード例 #12
0
ファイル: MainForm.cs プロジェクト: sakpung/webstudy
        /// <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);
        }