C#模糊图像

时间:2013-09-25 16:56:18

标签: c# image blur

我试图通过遍历一个图像的所有像素来模拟C#中的图像,然后创建一个新的位图,其中原始图像中像素的颜色除以像素数,以创建平均颜色。当我运行它时,没有任何反应。这是代码:

private void blurToolStripMenuItem_Click(object sender, EventArgs e)
    {
        Bitmap img = new Bitmap(pictureBox1.Image);
        Bitmap blurPic = new Bitmap(img.Width, img.Height);

        Int32 avgR = 0, avgG = 0, avgB = 0;
        Int32 blurPixelCount = 0;

        for (int y = 0; y < img.Height; y++)
        {
            for (int x = 0; x < img.Width; x++)
            {
                Color pixel = img.GetPixel(x, y);
                avgR += pixel.R;
                avgG += pixel.G;
                avgB += pixel.B;

                blurPixelCount++;
            }
        }

        avgR = avgR / blurPixelCount;
        avgG = avgG / blurPixelCount;
        avgB = avgB / blurPixelCount;

        for (int y = 0; y < img.Height; y++)
        {
            for (int x = 0; x < img.Width; x++)
            {
                blurPic.SetPixel(x, y, Color.FromArgb(avgR, avgG, avgB));
            }
        }

        img = blurPic;
    }

谢谢!

2 个答案:

答案 0 :(得分:1)

在方法结束时使用pictureBox1.Image = blurPic;

答案 1 :(得分:0)

这是在c#代码中模糊图像的最简单方法,但 N.B您必须等待图像完全加载才能开始处理

简而言之,我们将为您的图像使用ImageOpened事件处理程序。因此,我们将使用WriteableBitmap类,该类具有模糊图像和对图像应用各种效果的方法。

WriteableBitExtensions包含GaussianBlur5x5,这是我们将要使用的。

  

此代码假定您从网址获取图像,因此我们首先下载图像以从网络获取流的内容。但是如果您的图像是本地的,那么您可以先将其转换为IRandomAccessStream并将其作为参数传递。

double height = pictureBox1.ActualHeight;
        double width = pictureBox1.ActualWidth;

        HttpClient client = new HttpClient();
        HttpResponseMessage response = await client.GetAsync("image-url-goes-here");

        var webResponse = response.Content.ReadAsStreamAsync();
        randomStream = webResponse.Result.AsRandomAccessStream();
        randomStream.Seek(0);


        wb = wb.Crop(50, 50, 400, 400);
        wb = wb.Resize(10,10 ,         WriteableBitmapExtensions.Interpolation.NearestNeighbor);
        wb = WriteableBitmapExtensions.Convolute(wb,WriteableBitmapExtensions.KernelGaussianBlur5x5);

        pictureBox1.Source= wb;