Silverlight 3 這次帶來的全新位圖API令圖像處理更加便捷。本文介紹了通過Silverlight 3 的 WriteableBitmap 類創建圖像的思路方法。
【51CTO快譯】Silverlight 3 這次帶來的全新位圖API實現了如下的三個首要目標:
◆從無到有創建位圖,以像素為單位
◆在客戶端處理從服務器或本地加載的圖像
◆從視覺樹到位圖的分區渲染,以達成類似于截屏的功能(另外,預渲染和緩存元素有時也能起到提高性能的作用)
從無到有創建位圖
創建位圖的關鍵在于System.Windows.Media.Imaging下的WriteableBitmap類。運用此類可以創建一個預先分配到普通圖像元素上的源。
﹤Grid x:Name="LayoutRoot"﹥
﹤Image x:Name="MyBitmap"
Width="200"
Height="200" /﹥
﹤/Grid﹥
|
以下提供的代碼可以實現一些很有趣的圖形效果。
private void BuildBitmap() { const int imageWidth = 200; const int imageHeight = 200;
WriteableBitmap b = new WriteableBitmap(imageWidth, imageHeight, PixelFormats.Bgr32);
b.Lock();
for (int x = 0; x ﹤ imageWidth; x++) { for (int y = 0; y ﹤ imageHeight; y++) { // generate a color in Pbgra32 format byte[] components = new byte[4]; components[0] = (byte)(x % 255); // blue components[1] = (byte)(y % 255); // green components[2] = (byte)(x * y % 255); // red components[3] = 0; // unused
// you could certainly do your own masking here int pixelValue = BitConverter.ToInt32(components, 0);
// set the pixel value b[y * imageWidth + x] = pixelValue; } }
b.Invalidate(); b.Unlock();
MyBitmap.Source = b;
} |
最終成品如下:

可以明顯看出,以上代碼經歷了四個流程:鎖定,寫入,無效化,解鎖。這是WPF兼容所需要的。
你也可以修改一個現有的位圖,并渲染該位圖的內容控件。
原文:Silverlight 3 – The Bitmap API / WriteableBitmap
作者:Pete Brown
【編輯推薦】
- 微軟發布Silverlight 3首個Beta版
- 見微知著 Silverlight 3與Flash橫向比較
- Silverlight 3將支持3D圖像和硬件加速