【发布时间】:2016-11-03 13:15:38
【问题描述】:
我试图通过在每次移动鼠标指针时绘制圆圈来更新图像。 pixelBuffer 存储在map 对象中,并使用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 组件上。为什么当我只更改它的源时它不会更新,但是当我将它的源更改为不同的对象时它会更新。
`
【问题讨论】:
标签: c# uwp win-universal-app windows-10-universal writablebitmap