基本上,我想在WPF,哪里可以写像素的位图和更新并显示通过WPF该位图GDI类型的功能。 请注意,我需要能够通过响应对鼠标移动的更新像素的动画在飞行位图。 我读过InteropBitmap非常适合这一点,你可以写像素内存和存储位置复制到该位图 - 但我没有任何很好的例子去了。
有谁知道有什么好的资源,教程,或博客使用InteropBitmap或其他一些类在WPF做高性能2D图形?
基本上,我想在WPF,哪里可以写像素的位图和更新并显示通过WPF该位图GDI类型的功能。 请注意,我需要能够通过响应对鼠标移动的更新像素的动画在飞行位图。 我读过InteropBitmap非常适合这一点,你可以写像素内存和存储位置复制到该位图 - 但我没有任何很好的例子去了。
有谁知道有什么好的资源,教程,或博客使用InteropBitmap或其他一些类在WPF做高性能2D图形?
这里是我的发现:
我创建了一个子类图像需要的类别。
public class MyImage : Image {
// the pixel format for the image. This one is blue-green-red-alpha 32bit format
private static PixelFormat PIXEL_FORMAT = PixelFormats.Bgra32;
// the bitmap used as a pixel source for the image
WriteableBitmap bitmap;
// the clipping bounds of the bitmap
Int32Rect bitmapRect;
// the pixel array. unsigned ints are 32 bits
uint[] pixels;
// the width of the bitmap. sort of.
int stride;
public MyImage(int width, int height) {
// set the image width
this.Width = width;
// set the image height
this.Height = height;
// define the clipping bounds
bitmapRect = new Int32Rect(0, 0, width, height);
// define the WriteableBitmap
bitmap = new WriteableBitmap(width, height, 96, 96, PIXEL_FORMAT, null);
// define the stride
stride = (width * PIXEL_FORMAT.BitsPerPixel + 7) / 8;
// allocate our pixel array
pixels = new uint[width * height];
// set the image source to be the bitmap
this.Source = bitmap;
}
WriteableBitmap的有一个称为WritePixels方法,该方法无符号整数作为像素数据的阵列。 我设置图像的来源是WriteableBitmap的。 现在,当我更新的像素数据,并调用WritePixels,它更新图像。
我的业务点数据存储在一个单独的对象为点的列表。 我名单上的进行转换,并更新转换后的点的像素数据。 这种方式有没有从几何对象的开销。
仅供参考,我用一种叫布氏算法绘制的线条连接我的观点。
这种方法是非常快的。 我更新约50,000点(和连接线)响应于鼠标的移动,没有明显的滞后。
下面是使用一个博客帖子网络摄像头与InteropBitmap 。 它包括一个完整的源代码项目演示InteropBitmap的使用。