2011-10-20 4 views
0

사용자가 OCR 실행을 원하는 텍스트를 강조 표시 할 수 있도록 텍스트가 포함 된 그림을 사용자가 가져 오도록 시도하고 있습니다.WP7 카메라 롤 시뮬레이션 응용 프로그램에서 줌 및 드래그 기능

사진 부분이 아래로 있으며 이미지를 표시 할 수 있습니다. 그런 다음 사용자가 집어 넣고 확대/축소 한 다음 스 와이프하여 사진을 이동하는 것처럼 카메라 롤이 개별 사진에 대해 수행하는 것처럼 할 수 있습니다. 이렇게하면 사용자가 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); 
} 

나는 그래서 그것을 100 %의 신용을하지 않습니다 WindowsPhoneGeek에서이 코드를 발견했다. 나는 너무 멀리 확대 할 때 실제로 그림을 잃어 버리고 축소 할 때 다른 여백으로 튀어서 미쳐 버립니다. 이미지를 90도 회전해야하기 때문에이 문제가 발생할 수 있다고 생각합니다.

또한 사용자가 드래그 동작으로 그림을 이동하게하고 싶습니다. 누구든지 이와 같은 일을하거나 조언을 얻은 적이 있습니까?

또한 WP7로 근무하는 제 2 주에 불과하므로 간단한 것을 놓칠 수 있습니다. 미리 감사드립니다.

답변

1

http://multitouch.codeplex.com/에는 몇 가지 기존 동작이있어 사용자의 요구에보다 간편하게 해결할 수 있습니다.

+0

트릭을 수행하는 것처럼 보입니다. 감사. – garry

관련 문제