2017-12-10 7 views
2

너비와 높이가 설정된 캔버스를 사용합니다. 그것은 큰 500x500이며, 또한이 방법 등을 저장할 :InkCanvas 저장에서 잘못된 치수가 생성됩니다.

private async void SaveasGIF(object sender, RoutedEventArgs e) 
    { 
     var savePicker = new Windows.Storage.Pickers.FileSavePicker(); 
     savePicker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.PicturesLibrary; 
     savePicker.FileTypeChoices.Add("Gif with embedded ISF", new[] { ".gif" }); 

     Windows.Storage.StorageFile file = await savePicker.PickSaveFileAsync(); 
     if (null != file) 
     { 
      try 
      { 
       using (Windows.Storage.Streams.IRandomAccessStream stream = await file.OpenAsync(Windows.Storage.FileAccessMode.ReadWrite)) 
       { 
        // Truncate any existing stream in case the new file 
        // is smaller than the old file. 
        stream.Size = 0; 

        await MyInkCanvas.InkPresenter.StrokeContainer.SaveAsync(stream); 
       } 
       //MainPage.NotifyUser("File has been saved!", NotifyType.StatusMessage); 
      } 
      catch (Exception ex) 
      { 
       //MainPage.NotifyUser(ex.Message, NotifyType.ErrorMessage); 
      } 
     } 
     SaveGIF.IsChecked = false; 
    } 

을하지만 그렇게 할 때, .gif 파일 완성은립니다 및 421x643 등의 크기를 가지고있다.

이 문제를 해결하기 위해 변경할 수있는 항목은 무엇입니까?

답변

0

이 코드 await MyInkCanvas.InkPresenter.StrokeContainer.SaveAsync(stream);은 파일에 잉크 스트로크 컬렉션을 저장하는 것입니다. 이것은 InkCanvas 컨트롤의 내용을 이미지로 렌더링하는 것과 정확히 같지 않습니다. 획이 InkCanvas을 넘으면 결과 .gif 치수가 원래 InkCanvas 치수보다 커지고 그 반대의 경우도 발생합니다.

InkCanvas의 내용을 InkCanvas에로드하려는 잉크 스트로크가 아니라 이미지로 저장하는 것이 가장 큰 목표 인 경우 Win2D as described here을 사용하십시오.

+0

감사합니다. 캔버스를 만들 때 캔버스 크기를 설정했습니다. 실제로 나중에 다른 캔버스에로드하기 위해 잉크 스트로크를 저장하려고하지만 이전 캔버스의 크기와 동일한 크기로 유지하려고합니다. – JDoeDoeDoeJ

0

알려진 문제입니다. Win2D Github issue에서 확인할 수 있습니다.

InkStroke.GetBounds는 베 지어 곡률을 고려하지 않으므로 스트로크의 주 제어점에 대한 경계 만보고합니다.

해결 방법은 shawnhar의 comment을 참조하십시오.

해결 방법은 (CanvasGeometry.CreateInk 사용) Win2D 형상으로 잉크 스트로크를 변환 한 후 자신의 경계를 조회 할 수 Win2D 형상 API를 사용하는 것입니다. 모든 펜 잉크 스트로크는 정확하지만 연필 잉크 스타일을 사용하는 경우 작동하지 않습니다.