0

我试图通过遍历一个图像的所有像素来模糊 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;
    }

谢谢!

4

2 回答 2

1

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

于 2013-09-25T16:59:08.317 回答
0

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

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

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

此代码假设您从 url 获取图像,因此我们首先下载图像以从网络获取流的内容。但是,如果您的图像是本地的,那么您可以先将其转换为 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;
于 2016-08-17T09:10:10.577 回答