マウスポインタを動かすたびに円を描いて画像を更新しようとしています。pixelBuffer はmap
object に格納され、 で更新されますCircleFilledWithGradientMethod()
。ピクセル バッファーを に読み込んでからWriteableBitmap Bitmap
、XAML UI の画像要素の画像ソースをビットマップに設定して表示しようとしました。何が起こるかというと、最初にマウスを動かしたときに最初の 2 つの円が描かれているのに、マウスを動かしても画像が更新されないということです。それはなぜでしょうか?Image
強制的に再描画するために呼び出す必要があるメソッドはありますか? 私が 2 回使用する理由はstream.WriteAsync
、1 回だけ使用できた場合に、それが適切に機能していることを示すためです。
private async void TextArea_PointerMoved(object sender, PointerRoutedEventArgs e)
{
Pixel pixel1 = new Pixel(255, 0, 0);
Pixel pixel2 = new Pixel(255, 255, 255);
map.CircleFilledWithGradient((int) pointer.Position.X, (int)pointer.Position.Y, 100, pixel1, pixel2);
using (Stream stream = Bitmap.PixelBuffer.AsStream())
{
stream.WriteAsync(map.pixelData, 0, map.pixelData.Length);
}
map.CircleFilledWithGradient((int)pointer.Position.X+100, (int)pointer.Position.Y, 100, pixel1, pixel2);
using (Stream stream = Bitmap.PixelBuffer.AsStream())
{
stream.WriteAsync(map.pixelData, 0, map.pixelData.Length);
}
this.Image.Source = Bitmap;
}
私が考えているのは、画面に画像を描画するとすぐにキャッシュされ、古い画像を使い続けるということです。それとも、標準の Image 要素が再描画をサポートしていないということですか?
更新: 私Bitmap
はプライベート クラス変数でした。私が行った場合
WriteableBitmap Bitmap = new WriteableBitmap((int)this.ActualWidth, (int)this.Grid.RowDefinitions[1].ActualHeight);
それはすべて動き始めますが、そのメモリは非効率的ではありませんか? WriteableBitmap
マウスを動かすたびに、新しいものごとにメモリを割り当てていませんか。そして、私が発見したように、問題は間違いなく画像コンポーネントにあります。ソースを変更しただけでは更新されず、ソースを別のオブジェクトに変更すると更新されないのはなぜですか。`