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;
}
}
}
