【发布时间】:2011-10-20 15:29:44
【问题描述】:
我试图让用户为包含文本的内容拍照,以便用户可以突出显示他们想要运行 OCR 的文本。
我把图片部分放下了,我可以显示图片了。然后,我希望用户能够捏合以缩放然后滑动以移动图片,就像相机胶卷对单张照片所做的那样。这将允许用户更清楚地看到他们想要运行 OCR 的文本。目前我只有捏缩放工作,但非常糟糕。
private Popup popup = new Popup { IsOpen = true };
private Grid grid = new Grid { Width = 480, Height = 800 };
private Image backgroundImage = new Image
{
Stretch = Stretch.Uniform,
RenderTransformOrigin = new Point(.5, .5),
RenderTransform = new CompositeTransform()
};
void OCRSelection_Loaded(object sender, RoutedEventArgs e)
{
this.grid.Children.Add(this.backgroundImage);
this.popup.Child = this.grid;
var gl = GestureService.GetGestureListener(this.backgroundImage);
gl.PinchStarted += new EventHandler<PinchStartedGestureEventArgs(gl_PinchStarted);
gl.PinchDelta += new EventHandler<PinchGestureEventArgs>(gl_PinchDelta);
}
private void gl_PinchStarted(object sender, PinchStartedGestureEventArgs e)
{
_oldFinger1 = e.GetPosition(this.backgroundImage, 0);
_oldFinger2 = e.GetPosition(this.backgroundImage, 1);
_oldScaleFactor = 1;
}
private void gl_PinchDelta(object sender, PinchGestureEventArgs e)
{
var scaleFactor = e.DistanceRatio / _oldScaleFactor;
var currentFinger1 = e.GetPosition(this.backgroundImage, 0);
var currentFinger2 = e.GetPosition(this.backgroundImage, 1);
var translationDelta = GetTranslationDelta(
currentFinger1,
currentFinger2,
_oldFinger1,
_oldFinger2,
ImagePosition,
scaleFactor);
_oldFinger1 = currentFinger1;
_oldFinger2 = currentFinger2;
_oldScaleFactor = e.DistanceRatio;
UpdateImage(scaleFactor, translationDelta);
}
private void UpdateImage(double scaleFactor, Point delta)
{
TotalImageScale *= scaleFactor;
ImagePosition = new Point(ImagePosition.X + delta.X, ImagePosition.Y + delta.Y);
var transform = (CompositeTransform)this.backgroundImage.RenderTransform;
transform.ScaleX = TotalImageScale;
transform.ScaleY = TotalImageScale;
transform.TranslateX = ImagePosition.X;
transform.TranslateY = ImagePosition.Y;
}
private Point GetTranslationDelta( Point currentFinger1, Point currentFinger2, Point oldFinger1, Point oldFinger2,
Point currentPosition, double scaleFactor)
{
var newPos1 = new Point(
currentFinger1.X + (currentPosition.X - oldFinger1.X) * scaleFactor,
currentFinger1.Y + (currentPosition.Y - oldFinger1.Y) * scaleFactor);
var newPos2 = new Point(
currentFinger2.X + (currentPosition.X - oldFinger2.X) * scaleFactor,
currentFinger2.Y + (currentPosition.Y - oldFinger2.Y) * scaleFactor);
var newPos = new Point(
(newPos1.X + newPos2.X) / 2,
(newPos1.Y + newPos2.Y) / 2);
return new Point(
newPos.X - currentPosition.X,
newPos.Y - currentPosition.Y);
}
我从 WindowsPhoneGeek 找到了这段代码,所以我不会 100% 相信它。实际上,当我缩小得太远时,我会丢失图片,并且当我缩小时,它也会因为弹跳到不同的边距而变得疯狂。我相信这可能是因为我必须将图像旋转 90 度。
我还想让用户通过拖动手势来移动图片。有没有人做过类似的事情或有任何提示?
另外,这只是我使用 WP7 的第二周,所以我可能只是缺少一些简单的东西。提前致谢。
【问题讨论】:
标签: windows-phone-7 camera photo-gallery