İşte ne buldum var:
Ben Image alt sınıfların bir sınıf yarattı.
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 piksel verileri olarak işaretsiz ints dizisini alır WritePixels adlı bir yöntem vardır. Görüntünün kaynağını WriteableBitmap olarak ayarladım. Şimdi, piksel verilerini güncellediğimde ve WritePixels'i aradığımda, görüntüyü günceller.
İş noktası verilerini ayrı bir nesnede bir Nokta Listesi olarak saklıyorum. Listede dönüşümler yapıyorum ve piksel verilerini dönüştürülmüş noktalarla güncelliyorum. Bu şekilde Geometri nesnelerinden hiçbir yük yoktur.
Sadece FYI, noktalarımı Bresenham'ın algoritması adlı bir şeye çizilen çizgilerle birleştiriyorum. Bu yöntem hızlıdır. Fare hareketlerine tepki olarak yaklaşık 50.000 puan (ve bağlantı çizgileri) güncelleştiriyorum, fark edilebilir bir gecikme yok.
Pixel-pixel şeyler yapıyorsanız, WPF'ye gerçekten ihtiyacınız var mı? – MusiGenesis
Uygulamanın geri kalanının içeriği WPF'dir. – Klay