每次移动鼠标指针时,我都会尝试通过绘制圆圈来更新图像。pixelBuffer 存储在map
object 中并使用CircleFilledWithGradientMethod()
. 我将像素缓冲区加载到WriteableBitmap Bitmap
然后尝试通过将我的 XAML UI 中的图像元素的图像源设置为位图来显示它。发生的情况是,当我第一次移动鼠标时,我看到了前两个圆圈,但是当我移动鼠标时,图像没有更新。为什么会这样?有没有我应该调用的方法Image
来强制它重绘?我使用stream.WriteAsync
两次的原因,而我本来可以只使用一次,只是为了表明它工作正常。
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
每次移动鼠标时,我不是为每个新分配内存吗?正如我发现的那样,问题肯定出在 Image 组件上。为什么当我只更改它的源时它不会更新,但是当我将它的源更改为不同的对象时它会更新。`