Note that there are some explanatory texts on larger screens.

plurals
  1. POBlur the selected part of the image
    primarykey
    data
    text
    <p>I am trying to create an application in C# (WinForms), something similar to this <a href="https://stackoverflow.com/questions/14107979/blur-an-image-of-specific-part-rectangular-circular">iOS Question</a> </p> <p>I managed to get part of it working, I can blur an image using this <a href="http://notes.ericwillis.com/2009/10/blur-an-image-with-csharp/" rel="nofollow noreferrer">algorithm</a></p> <p>Also I am able to draw a selection rectangle, I do not know if I am going wrong with the blurring or passing the rectangle. I have attached the file as shown below. <img src="https://i.stack.imgur.com/7iRzF.jpg" alt="Blurring Effect"></p> <p>As seen, the blurring is outside the selection box. </p> <p>I have pasted the code below:</p> <pre><code>// Start Rectangle private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { // Determine the initial rectangle coordinates... RectStartPoint = e.Location; Invalidate(); } private void pictureBox1_MouseMove(object sender, MouseEventArgs e) { if (e.Button != MouseButtons.Left) return; Point tempEndPoint = e.Location; Rect.Location = new Point( Math.Min(RectStartPoint.X, tempEndPoint.X), Math.Min(RectStartPoint.Y, tempEndPoint.Y)); Rect.Size = new Size( Math.Abs(RectStartPoint.X - tempEndPoint.X), Math.Abs(RectStartPoint.Y - tempEndPoint.Y)); pictureBox1.Invalidate(); } // Draw Area private void pictureBox1_Paint(object sender, PaintEventArgs e) { // Draw the rectangle... if (pictureBox1.Image != null) { if (Rect != null &amp;&amp; Rect.Width &gt; 0 &amp;&amp; Rect.Height &gt; 0) { e.Graphics.DrawRectangle(selectionPen, Rect); } } } private void pictureBox1_MouseUp(object sender, MouseEventArgs e) { //Right now I am using right click as a call to blur if (e.Button == MouseButtons.Right) { if (Rect.Contains(e.Location)) { pictureBox1.Image = Blur(pictureBox1.Image, Rect, 5); pictureBox1.Refresh(); } } } private void blurPageToolStripMenuItem_Click(object sender, EventArgs e) { FullRect = new Rectangle(0, 0, pictureBox1.Image.Width, pictureBox1.Image.Height); pictureBox1.Image = Blur(pictureBox1.Image, FullRect, 5); } private System.Drawing.Image Blur(System.Drawing.Image image, Rectangle rectangle, Int32 blurSize) { Bitmap blurred = new Bitmap(image); //image.Width, image.Height); using (Graphics graphics = Graphics.FromImage(blurred)) { // look at every pixel in the blur rectangle for (Int32 xx = rectangle.Left; xx &lt; rectangle.Right; xx += blurSize) { for (Int32 yy = rectangle.Top; yy &lt; rectangle.Bottom; yy += blurSize) { Int32 avgR = 0, avgG = 0, avgB = 0; Int32 blurPixelCount = 0; Rectangle currentRect = new Rectangle(xx, yy, blurSize, blurSize); // average the color of the red, green and blue for each pixel in the // blur size while making sure you don't go outside the image bounds for (Int32 x = currentRect.Left; (x &lt; currentRect.Right &amp;&amp; x &lt; image.Width); x++) { for (Int32 y = currentRect.Top; (y &lt; currentRect.Bottom &amp;&amp; y &lt; image.Height); y++) { Color pixel = blurred.GetPixel(x, y); avgR += pixel.R; avgG += pixel.G; avgB += pixel.B; blurPixelCount++; } } avgR = avgR / blurPixelCount; avgG = avgG / blurPixelCount; avgB = avgB / blurPixelCount; // now that we know the average for the blur size, set each pixel to that color graphics.FillRectangle(new SolidBrush(Color.FromArgb(avgR, avgG, avgB)), currentRect); } } graphics.Flush(); } return blurred; } </code></pre> <p>Another problem I am facing is, when the form is loaded initially, it starts in minimised mode, now if I use the selection (red rectangle), and then if I maximise the application the selected part of the picture is different.</p> <p>Thank you for the help/suggestion in advance. If any links to a tool similar is around, please do share as I might have missed it. Thanks </p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload