Exemple #1
0
        public mFilterTexture(mTexture SourceTexture, mFilters Filter)
        {
            BitmapType = Filter.BitmapType;

            MaskTexture = SourceTexture;

            Effect = new TexturedFilter(MaskTexture.Texture, Filter.Sequence[0]);

            Sequence.Clear();
            Sequence.Add(Effect);
        }
Exemple #2
0
        private void rb_Dirty_Click(object sender, EventArgs e)
        {
            if (this.drawArea.Image == null)
            {
                return;
            }
            TexturedFilter filter = new TexturedFilter(new CloudsTexture(), new Sepia());

            filter.PreserveLevel = 0.30f;
            filter.FilterLevel   = 0.90f;
            flag = "Dirty";
            ApplyFilter(filter);
            xml += this.SaveImageToXml.SaveImgProcess(this.drawArea, this.lb_ImageName.Text, flag);
            //SaveImgToXml.SaveImgProcess(this.drawArea, this.lb_ImageName.Text, flag);
        }
Exemple #3
0
        /// <summary>
        /// Apply a filter over an image
        /// </summary>
        /// <param name="imageFilterParameters">Filter parameters</param>
        /// <returns>Image result of apply filter</returns>
        public static Bitmap ApplyFilter(ImageFilterParameters imageFilterParameters)
        {
            dynamic filterProcessor;

            // choose the filter
            switch (imageFilterParameters.Filter)
            {
            case EnumImageFilter.GrayScale:
                filterProcessor = new Grayscale(0.2125, 0.7154, 0.0721);
                break;

            case EnumImageFilter.Invert:
                filterProcessor = new Invert();
                break;

            case EnumImageFilter.Median:
                filterProcessor = new Median();
                break;

            case EnumImageFilter.Rotate:
                var finalAngle = imageFilterParameters.Angle ?? 0;
                filterProcessor = new RotateBicubic(finalAngle);
                break;

            case EnumImageFilter.TexturedHue:
                filterProcessor = new TexturedFilter(new CloudsTexture(), new HueModifier(50));
                break;

            case EnumImageFilter.Resize:
                var finalWidth  = imageFilterParameters.Width ?? imageFilterParameters.Image.Width;
                var finalHeight = imageFilterParameters.Height ?? imageFilterParameters.Image.Height;
                filterProcessor = new ResizeBicubic(finalWidth, finalHeight);
                break;

            case EnumImageFilter.FaceDetection:
                return(FaceDetection(imageFilterParameters.Image).ImageResult);

            default:
                filterProcessor = new TexturedFilter(new CloudsTexture(), new GrayscaleBT709(), new Sepia());
                break;
            }
            // apply the filter
            var response = filterProcessor.Apply(imageFilterParameters.Image);

            // return new image
            return(response);
        }
Exemple #4
0
        private void cb_EffectType_SelectedIndexChanged(object sender, EventArgs e)
        {
            switch (cb_EffectType.SelectedIndex)
            {
            case 0:                     // Marble effect
                filter = new Texturer(new MarbleTexture(imageWidth / 96, imageHeight / 48), 0.7f, 0.3f);
                flag   = "Marble";
                break;

            case 1:                     // Wood effect
                filter = new Texturer(new WoodTexture(), 0.7f, 0.3f);
                flag   = "Wood";
                break;

            case 2:                     // Clouds
                filter = new Texturer(new CloudsTexture(), 0.7f, 0.3f);
                flag   = "Clouds";
                break;

            case 3:                     // Labyrinth
                filter = new Texturer(new LabyrinthTexture(), 0.7f, 0.3f);
                flag   = "Labyrinth";
                break;

            case 4:                     // Textile
                filter = new Texturer(new TextileTexture(), 0.7f, 0.3f);
                flag   = "Textile";
                break;

            case 5:                     // Dirty
                TexturedFilter f = new TexturedFilter(new CloudsTexture(), new Sepia());

                f.PreserveLevel = 0.30f;
                f.FilterLevel   = 0.90f;

                filter = f;
                flag   = "Dirty";
                break;

            case 6:                     // Rusty
                filter = new TexturedFilter(new CloudsTexture(), new Sepia(), new GrayscaleBT709());
                flag   = "Rusty";
                break;
            }
            drawArea.Filter = filter;
        }
        // On selected index changed in effects combo box
        private void effectComboBox_SelectedIndexChanged(object sender, System.EventArgs e)
        {
            switch (effectComboBox.SelectedIndex)
            {
            case 0:                     // Marble effect
                filter = new Texturer(new MarbleTexture(imageWidth / 96, imageHeight / 48), 0.7f, 0.3f);
                break;

            case 1:                     // Wood effect
                filter = new Texturer(new WoodTexture( ), 0.7f, 0.3f);
                break;

            case 2:                     // Clouds
                filter = new Texturer(new CloudsTexture( ), 0.7f, 0.3f);
                break;

            case 3:                     // Labyrinth
                filter = new Texturer(new LabyrinthTexture( ), 0.7f, 0.3f);
                break;

            case 4:                     // Textile
                filter = new Texturer(new TextileTexture( ), 0.7f, 0.3f);
                break;

            case 5:                     // Dirty
                TexturedFilter f = new TexturedFilter(new CloudsTexture( ), new Sepia( ));

                f.PreserveLevel = 0.30f;
                f.FilterLevel   = 0.90f;

                filter = f;

                break;

            case 6:                     // Rusty
                filter = new TexturedFilter(new CloudsTexture( ), new Sepia( ),
                                            Grayscale.CommonAlgorithms.BT709);

                break;
            }

            filterPreview.Filter = filter;
        }
Exemple #6
0
        public void GetImageProcess()//显示图片时读取
        {
            XmlNode node = xmlDoc.SelectSingleNode("PatientBackImage/Image[@Name='" + ImageName + "'] ");

            if (node != null)
            {
                if (node.HasChildNodes)
                {
                    XmlNodeList xmlNolist = node.ChildNodes;
                    foreach (XmlNode xn in xmlNolist)
                    {
                        XmlElement xmlE = (XmlElement)xn;
                        switch (xmlE.Name)
                        {
                        case "DrawLine":
                            DrawLine dl = new DrawLine(Convert.ToInt32(xmlE.GetAttribute("StartPointX")), Convert.ToInt32(xmlE.GetAttribute("StartPointY")), Convert.ToInt32(xmlE.GetAttribute("EndPointX")), Convert.ToInt32(xmlE.GetAttribute("EndPointY")));
                            dl.ID = Convert.ToInt32(xmlE.GetAttribute("ID"));
                            frmImgProcess.imgProcess.drawArea.GraphicsList.UnselectAll();
                            frmImgProcess.imgProcess.drawArea.GraphicsList.Add(dl);
                            frmImgProcess.imgProcess.drawArea.Capture = true;
                            frmImgProcess.imgProcess.drawArea.Refresh();
                            break;

                        case "DrawRectangle":
                            DrawRectangle dr = new DrawRectangle(Convert.ToInt32(xmlE.GetAttribute("X")), Convert.ToInt32(xmlE.GetAttribute("Y")), Convert.ToInt32(xmlE.GetAttribute("Width")), Convert.ToInt32(xmlE.GetAttribute("Height")));
                            dr.ID = Convert.ToInt32(xmlE.GetAttribute("ID"));
                            frmImgProcess.imgProcess.drawArea.GraphicsList.UnselectAll();
                            frmImgProcess.imgProcess.drawArea.GraphicsList.Add(dr);
                            frmImgProcess.imgProcess.drawArea.Capture = true;
                            frmImgProcess.imgProcess.drawArea.Refresh();
                            break;

                        case "DrawEllipse":
                            DrawEllipse de = new DrawEllipse(Convert.ToInt32(xmlE.GetAttribute("X")), Convert.ToInt32(xmlE.GetAttribute("Y")), Convert.ToInt32(xmlE.GetAttribute("Width")), Convert.ToInt32(xmlE.GetAttribute("Height")));
                            de.ID = Convert.ToInt32(xmlE.GetAttribute("ID"));
                            frmImgProcess.imgProcess.drawArea.GraphicsList.UnselectAll();
                            frmImgProcess.imgProcess.drawArea.GraphicsList.Add(de);
                            frmImgProcess.imgProcess.drawArea.Capture = true;
                            frmImgProcess.imgProcess.drawArea.Refresh();
                            break;

                        case "DrawPoint":
                            DrawPoint dp = new DrawPoint(Convert.ToInt32(xmlE.GetAttribute("X")), Convert.ToInt32(xmlE.GetAttribute("Y")));
                            dp.ID = Convert.ToInt32(xmlE.GetAttribute("ID"));
                            frmImgProcess.imgProcess.drawArea.GraphicsList.UnselectAll();
                            frmImgProcess.imgProcess.drawArea.GraphicsList.Add(dp);
                            frmImgProcess.imgProcess.drawArea.Capture = true;
                            frmImgProcess.imgProcess.drawArea.Refresh();
                            break;

                        case "DrawPolygon":
                            DrawPolygon dpy      = new DrawPolygon();
                            string      pointStr = xmlE.GetAttribute("pointStr");
                            string[]    poList   = pointStr.Split('$');
                            string[]    p        = { };
                            for (int i = 0; i < poList.Length; i++)
                            {
                                if (poList[i].ToString() != "")
                                {
                                    p = poList[i].Split(',');
                                    Point point = new Point(Convert.ToInt32(p[0]), Convert.ToInt32(p[1]));
                                    dpy.pointArray.Add(point);
                                }
                            }
                            dpy.ID = Convert.ToInt32(xmlE.GetAttribute("ID"));
                            frmImgProcess.imgProcess.drawArea.GraphicsList.UnselectAll();
                            frmImgProcess.imgProcess.drawArea.GraphicsList.Add(dpy);
                            frmImgProcess.imgProcess.drawArea.Capture = true;
                            frmImgProcess.imgProcess.drawArea.Refresh();
                            break;

                        case "TextBox":
                            ToolText tx = new ToolText(frmImgProcess.imgProcess.drawArea);
                            tx.Location     = new Point(Convert.ToInt32(xmlE.GetAttribute("X")), Convert.ToInt32(xmlE.GetAttribute("Y")));
                            tx.Width        = Convert.ToInt32(xmlE.GetAttribute("Width"));
                            tx.Height       = Convert.ToInt32(xmlE.GetAttribute("Height"));
                            tx.Name         = xmlE.GetAttribute("ID");
                            tx.Min          = true;
                            tx.Max          = true;
                            tx.IsChangeSize = true;
                            tx.ReadOnly     = false;
                            tx.IsMove       = true;
                            tx.Text         = xmlE.GetAttribute("Content");
                            tx.ForeColor    = System.Drawing.Color.Red;
                            frmImgProcess.imgProcess.drawArea.Controls.Add(tx);
                            break;

                        case "Process":
                            XmlNode nodeProcess = xmlDoc.SelectSingleNode("PatientBackImage/Image[@Name='" + ImageName + "']/Process ");
                            if (nodeProcess != null)
                            {
                                if (nodeProcess.HasChildNodes)
                                {
                                    XmlNodeList xmlNodeProcesslist = nodeProcess.ChildNodes;
                                    foreach (XmlNode xn2 in xmlNodeProcesslist)
                                    {
                                        XmlElement xmlE2 = (XmlElement)xn2;

                                        switch (xmlE2.Name)
                                        {
                                        case "BrightnessCorrection":        //亮度
                                            BrightnessCorrection brightnesscorr = new BrightnessCorrection();
                                            brightnesscorr.AdjustValue = double.Parse(xmlE2.GetAttribute("Value"));
                                            frmImgProcess.imgProcess.ApplyFilter(brightnesscorr);
                                            break;

                                        case "ContrastCorrection":        //对比
                                            ContrastCorrection contrastCorr = new ContrastCorrection();
                                            contrastCorr.Factor = double.Parse(xmlE2.GetAttribute("Value"));
                                            frmImgProcess.imgProcess.ApplyFilter(contrastCorr);
                                            break;

                                        case "HueModifier":        //色相
                                            HueModifier huemodifier = new HueModifier();
                                            huemodifier.Hue = int.Parse(xmlE2.GetAttribute("Value"));
                                            frmImgProcess.imgProcess.ApplyFilter(huemodifier);
                                            break;

                                        case "Saturation":        //饱和度
                                            SaturationCorrection saturationcorr = new SaturationCorrection();
                                            saturationcorr.AdjustValue = double.Parse(xmlE2.GetAttribute("Value"));
                                            frmImgProcess.imgProcess.ApplyFilter(saturationcorr);
                                            break;

                                        case "GrayscaleBT709":        //灰度
                                            GrayscaleBT709 grayscalebt = new GrayscaleBT709();
                                            frmImgProcess.imgProcess.ApplyFilter(grayscalebt);
                                            break;

                                        case "Filter":        //过滤
                                            ColorFiltering colorfilter = new ColorFiltering();
                                            IntRange       red = new IntRange(0, 255);
                                            IntRange       green = new IntRange(0, 255);
                                            IntRange       blue = new IntRange(0, 255);
                                            byte           fillR = 0, fillG = 0, fillB = 0;
                                            string         fillType = "";
                                            red.Min               = int.Parse(xmlE2.GetAttribute("RedMin"));
                                            red.Max               = int.Parse(xmlE2.GetAttribute("RedMax"));
                                            green.Min             = int.Parse(xmlE2.GetAttribute("GreenMin"));
                                            green.Max             = int.Parse(xmlE2.GetAttribute("GreenMax"));
                                            blue.Min              = int.Parse(xmlE2.GetAttribute("BlueMin"));
                                            blue.Max              = int.Parse(xmlE2.GetAttribute("BlueMax"));
                                            fillR                 = byte.Parse(xmlE2.GetAttribute("FillRed"));
                                            fillG                 = byte.Parse(xmlE2.GetAttribute("FillGreen"));
                                            fillB                 = byte.Parse(xmlE2.GetAttribute("FillBlue"));
                                            fillType              = xmlE2.GetAttribute("FillType");
                                            colorfilter.Red       = red;
                                            colorfilter.Green     = green;
                                            colorfilter.Blue      = blue;
                                            colorfilter.FillColor = new RGB(fillR, fillG, fillB);
                                            if (fillType == "OutSide")
                                            {
                                                colorfilter.FillOutsideRange = true;
                                            }
                                            else
                                            {
                                                colorfilter.FillOutsideRange = false;
                                            }
                                            frmImgProcess.imgProcess.ApplyFilter(colorfilter);
                                            break;

                                        case "Gaussian":        //柔化
                                            GaussianBlur gaussianBlur = new GaussianBlur();
                                            gaussianBlur.Sigma = double.Parse(xmlE2.GetAttribute("Sigma"));
                                            gaussianBlur.Size  = int.Parse(xmlE2.GetAttribute("Size"));
                                            frmImgProcess.imgProcess.ApplyFilter(gaussianBlur);
                                            break;

                                        case "DifferenceEdgeDetector":        //边缘增强
                                            DifferenceEdgeDetector differenceEdgeD = new DifferenceEdgeDetector();
                                            frmImgProcess.imgProcess.ApplyFilter(differenceEdgeD);
                                            break;

                                        case "RotateFlip":        //镜像
                                            frmImgProcess.imgProcess.drawArea.Image.RotateFlip(RotateFlipType.RotateNoneFlipX);
                                            frmImgProcess.imgProcess.drawArea.Refresh();
                                            break;

                                        case "PerlinNoise":        //去噪
                                            string value = "";
                                            value = xmlE2.GetAttribute("Value");

                                            float imageWidth  = 0;
                                            float imageHeight = 0;
                                            switch (value)
                                            {
                                            case "Marble":
                                                filter = new Texturer(new MarbleTexture(imageWidth / 96, imageHeight / 48), 0.7f, 0.3f);
                                                break;

                                            case "Wood":
                                                filter = new Texturer(new WoodTexture(), 0.7f, 0.3f);
                                                break;

                                            case "Clouds":
                                                filter = new Texturer(new CloudsTexture(), 0.7f, 0.3f);
                                                break;

                                            case "Labyrinth":
                                                filter = new Texturer(new LabyrinthTexture(), 0.7f, 0.3f);
                                                break;

                                            case "Textile":
                                                filter = new Texturer(new TextileTexture(), 0.7f, 0.3f);
                                                break;

                                            case "Dirty":
                                                TexturedFilter f = new TexturedFilter(new CloudsTexture(), new Sepia());
                                                f.PreserveLevel = 0.30f;
                                                f.FilterLevel   = 0.90f;
                                                filter          = f;
                                                break;

                                            case "Rusty":
                                                filter = new TexturedFilter(new CloudsTexture(), new Sepia(), new GrayscaleBT709());
                                                break;
                                            }
                                            frmImgProcess.imgProcess.ApplyFilter(filter);
                                            break;

                                        case "Sharpen":
                                            Sharpen sharpen = new Sharpen();
                                            frmImgProcess.imgProcess.ApplyFilter(sharpen);
                                            break;

                                        case "Mean":
                                            Mean mean = new Mean();
                                            frmImgProcess.imgProcess.ApplyFilter(mean);
                                            break;
                                        }
                                    }
                                }
                            }
                            break;
                        }
                    }
                }
            }
        }