2012-09-10 60 views

回答

0

您可以使用this库来模糊和写入图像。

它可能会是这个样子:

// Blit a bitmap using the additive blend mode at P1(10, 10) 
writeableBmp.Blit(new Point(10, 10), bitmap, sourceRect, Colors.White, WriteableBitmapExtensions.BlendMode.Additive); 

或者,你可以只写自己(或使用代码别人写的)类似this

private static Bitmap Blur(Bitmap image, Rectangle rectangle, Int32 blurSize) 
{ 
    Bitmap blurred = new Bitmap(image.Width, image.Height); 

    // make an exact copy of the bitmap provided 
    using(Graphics graphics = Graphics.FromImage(blurred)) 
     graphics.DrawImage(image, new Rectangle(0, 0, image.Width, image.Height), 
      new Rectangle(0, 0, image.Width, image.Height), GraphicsUnit.Pixel); 

    // look at every pixel in the blur rectangle 
    for (Int32 xx = rectangle.X; xx < rectangle.X + rectangle.Width; xx++) 
    { 
     for (Int32 yy = rectangle.Y; yy < rectangle.Y + rectangle.Height; yy++) 
     { 
      Int32 avgR = 0, avgG = 0, avgB = 0; 
      Int32 blurPixelCount = 0; 

      // 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 = xx; (x < xx + blurSize && x < image.Width); x++) 
      { 
       for (Int32 y = yy; (y < yy + blurSize && y < 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 
      for (Int32 x = xx; x < xx + blurSize && x < image.Width && x < rectangle.Width; x++) 
       for (Int32 y = yy; y < yy + blurSize && y < image.Height && y < rectangle.Height; y++) 
        blurred.SetPixel(x, y, Color.FromArgb(avgR, avgG, avgB)); 
     } 
    } 

    return blurred; 
} 

要获得个人第二种方法的像素见here

BitmapImage iSrc 

var array = new int[iSrc.PixelWidth * iSrc.PixelHeight] 

var rect = new Int32Rect(0, 0, iSrc.PixelWidth, iSrc.PixelHeight) 

iSrc.CopyPixels(rect, array, iSrc.PixelWidth * 4, 0) 
+0

这是否工作,如果我不做没有'位图'?在全屏幕下以60 fps运行它的性能如何? –

+0

哦,你正在尝试制作一些动画?我会建议使用DirectX。您可能无法使用控件获得所需的性能。请参阅http://msdn.microsoft.com/en-us/library/windows/apps/br229580.aspx – mydogisbox

+0

我可能会对它进行动画制作,但是,希望它可以非常简单,无需借助DirectX即可完成,因为这需要比我们感到舒适的工作多得多的工作。 –

相关问题