我的通用应用程序(Windows Phone)中有以下代码:
void colourPicker_ManipulationDelta(object sender, ManipulationDeltaRoutedEventArgs e)
{
PicturePicker picturePicker = sender as PicturePicker;
GeneralTransform transform = picturePicker.TransformToVisual(ImageHolder);
Point controlPosition = transform.TransformPoint(new Point(0, 0));
int pointX = (int)controlPosition.X;
int pointY = (int)controlPosition.Y;
Color c = writeableBmp.GetPixel(pointX, pointY);
// WriteableBitmap newWB = writeableBmp.Crop(pointX - 21, pointY - 21, 42, 42);
// picturePicker.SetImageBrush(newWB);
SolidColorBrush brush = new SolidColorBrush(c);
picturePicker.SetColor(brush);
Canvas.SetLeft(picturePicker, Canvas.GetLeft(picturePicker) + e.Delta.Translation.X);
Canvas.SetTop(picturePicker, Canvas.GetTop(picturePicker) + e.Delta.Translation.Y);
}
我有一个图像,除此之外还有一个 UserControl(非常简单的 XAML),用户可以拖动它来找到他/她想要的颜色。只有拖动在 ManipulationDelta 上效果很好,但是当我尝试 GetPixel() 每次 ManipulationDelta 事件触发时,翻译变得非常滞后。如果我注释掉颜色的设置(picturePicker.SetColor),它仍然很慢,所以这不是问题。
很奇怪,非常相似的代码在 Silverlight 中这个应用程序的旧版本中运行流畅(在同一部手机上)。
关于如何改善这一点的任何想法?