WPF中的WriteableBitmap类

1. 生成位图

using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace 项目10 {
    public partial class MainWindow : Window {
        public MainWindow()
        {
            InitializeComponent();

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            WriteableBitmap wb=new WriteableBitmap((int)Image1.Width, (int)Image1.Height,
                96,96,PixelFormats.Bgra32, null);
            //Int32Rect rect=new Int32Rect(100,100,1,1);
            //wb.WritePixels(rect,colorData,4,0);
            Random random=new Random();
            for (int i = 0; i < wb.Width; i++)
            {
                for (int j = 0; j < wb.Height; j++)
                {
                    byte blue = (byte)random.Next(0,2555);
                    byte green = (byte)random.Next(0, 2555);
                    byte red = (byte)random.Next(0, 2555);
                    byte alpha = 255;
                    byte[] colorData = { blue, green, red, alpha };
                    Int32Rect rect=new Int32Rect(i,j,1,1);
                    int stride = wb.PixelWidth * wb.Format.BitsPerPixel / 8;
                    wb.WritePixels(rect,colorData,stride,0);
                }
            }
            Image1.Source = wb;
        }
    }    
}
<StackPanel>
    <Image x:Name="Image1" Margin="15" Width="400" Height="250"></Image>
    <Button Margin="5" Click="Button_Click">Generate BitMap</Button>
</StackPanel>

using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace 项目10 {
    public partial class MainWindow : Window {
        public MainWindow()
        {
            InitializeComponent();

        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            WriteableBitmap wb=new WriteableBitmap((int)Image1.Width, (int)Image1.Height,
                96,96,PixelFormats.Bgra32, null);
            Int32Rect rect = new Int32Rect(0,0, (int)Image1.Width, (int)Image1.Height);
            byte[] pixels =new byte[(int)Image1.Width*(int)Image1.Height*wb.Format.BitsPerPixel / 8];
            Random random=new Random();
            for (int i = 0; i < wb.Width; i++)
            {
                for (int j = 0; j < wb.Height; j++)
                {
                    byte blue = 0;
                    byte green =0;
                    byte red =0;
                    byte alpha = 0;
                    if ((i%15)==0||(j%17==0))
                    {
                        blue = (byte) ((double)j/wb.PixelHeight*255);
                        green = (byte)random.Next(100, 2555);
                        red = (byte)((double)j / wb.PixelWidth * 255);
                        alpha = 255;
                    }
                    else
                    {
                        blue = (byte)((double)j / wb.PixelHeight * 255);
                        green = (byte)random.Next(100, 2555);
                        red = (byte)((double)j / wb.PixelWidth * 255);
                        alpha = 25;
                    }

                    int pixelOffset = (i + j * wb.PixelWidth) * wb.Format.BitsPerPixel / 8;
                    pixels[pixelOffset] = (byte) blue;
                    pixels[pixelOffset+1] = (byte) green;
                    pixels[pixelOffset+2] = (byte) red;
                    pixels[pixelOffset+3] = (byte) alpha;
                }

                int stride = (wb.PixelWidth * wb.Format.BitsPerPixel) / 8;
                wb.WritePixels(rect,pixels,stride,0);
            }
            Image1.Source = wb;
        }
    }    
}