示例#1
0
        // Transform quadrilateral
        private void quadrilateralTransformationMenuItem_Click( object sender, EventArgs e )
        {
            // get corners of the quadrilateral
            QuadrilateralFinder qf = new QuadrilateralFinder( );
            List<IntPoint> corners = qf.ProcessImage( image );
            // create filter
            QuadrilateralTransformation filter =
                new QuadrilateralTransformation( corners );

            ApplyFilter( filter );
        }
示例#2
0
        // Find quadrilateral
        private void quadrilateralFinderMenuItem_Click( object sender, EventArgs e )
        {
            // get corners of the quadrilateral
            QuadrilateralFinder qf = new QuadrilateralFinder( );
            List<IntPoint> corners = qf.ProcessImage( image );

            Bitmap imageToPaint = image;

            if ( ( host.CreateNewDocumentOnChange ) || ( host.RememberOnChange ) )
            {
                // create copy image, so the original is kept
                imageToPaint = AForge.Imaging.Image.Clone( image );
            }

            // lock image to draw on it with AForge.NET's methods
            // (or draw directly on image without locking if it is unmanaged image)
            BitmapData data = imageToPaint.LockBits( new Rectangle( 0, 0, image.Width, image.Height ),
                ImageLockMode.ReadWrite, image.PixelFormat );

            Drawing.Polygon( data, corners, Color.Red );
            for ( int i = 0; i < corners.Count; i++ )
            {
                Drawing.FillRectangle( data,
                    new Rectangle( corners[i].X - 2, corners[i].Y - 2, 5, 5 ),
                    Color.FromArgb( i * 32 + 127 + 32, i * 64, i * 64 ) );
            }

            imageToPaint.UnlockBits( data );

            if ( host.CreateNewDocumentOnChange )
            {
                // open new image in new document
                host.NewDocument( imageToPaint );
            }
            else
            {
                if ( host.RememberOnChange )
                {
                    // backup current image
                    if ( backup != null )
                        backup.Dispose( );

                    backup = image;
                    image = imageToPaint;
                }

                // update
                UpdateNewImage( );
            }
        }