2017-09-14 15 views
0

Windows 잉크를 UWP 앱에 포함하려고 시도하고 Windows Ink tutorial app을 적용하여 시작된 그림을 GIF/ISF 대신 PNG 이미지로 저장합니다.Windows 잉크를 투명 PNG 이미지로 저장 - 형광펜 선이 누락되었습니다.

그래서, XAML보기는 Windows.UI.Xaml.Controls.InkToolbarWindows.UI.Xaml.Controls.InkCanvas 포함, 나는 캔버스에 선을 그린 다음 코드를 통해 이미지 파일로 저장 할 수있어 :

IReadOnlyList<InkStroke> currentStrokes = inkCanvas.InkPresenter.StrokeContainer.GetStrokes(); 
if (currentStrokes.Count > 0) 
{ 
    StorageFile file; 
    // Using a file picker to identify the target file -> omitted this part 
    if (file != null) 
    { 
     CanvasDevice device = CanvasDevice.GetSharedDevice(); 
     CanvasRenderTarget renderTarget = new CanvasRenderTarget(device, (int)inkCanvas.ActualWidth, (int)inkCanvas.ActualHeight, 96); 

     using (var ds = renderTarget.CreateDrawingSession()) 
     { 
      ds.Clear(Colors.White); 
      ds.DrawInk(currentStrokes); 
     } 
     using (var fileStream = await file.OpenAsync(FileAccessMode.ReadWrite)) 
      await renderTarget.SaveAsync(fileStream, CanvasBitmapFileFormat.Png, 1f); 
    } 
} 

다 그렇게 잘 작동 멀리. 지금, 나는 투명 배경 이미지를 저장, 그리고 다음 줄을 변경 것 :

ds.Clear(Colors.Transparent); 

이 경우에도, 파일이 저장, 배경이 투명하고, 볼펜 연필 스트로크뿐만 아니라 스트로크 올바르게 렌더링됩니다. 그러나 이미지 결과에는 형광펜 도구로 그려진 획이 포함되지 않습니다.

누군가이 경우이 획들이 생략 된 이유를 설명 할 수 있습니까? 어떻게 든 투명 배경 위에 형광펜 스트로크를 렌더링 할 수 있습니까?

답변

2

문제는 강조 선이 투명합니다. Transparent 색을 지울 때. 강조 선이 쉽게 감지되지 않습니다. 요구 사항에 맞춰 에 대해 attributes.DrawAsHighlighter이 아닌 새로운 attributes을 설정할 수 있습니다.

private void SetHighLight() 
{ 
    InkDrawingAttributes drawingAttributes = 
inkCanvas.InkPresenter.CopyDefaultDrawingAttributes(); 
    InkDrawingAttributes attributes = new InkDrawingAttributes(); 
    attributes.PenTip = PenTipShape.Rectangle; 
    attributes.Size = new Size(4, 10); 
    attributes.Color = drawingAttributes.Color; 
    inkCanvas.InkPresenter.UpdateDefaultDrawingAttributes(attributes); 
} 

DrawInk를 호출하기 전에 새 레이어를 추가하고 그것을 불투명도를했다. 그리고 형광펜을 사용하는 것처럼 보이는 형광펜을 위해 특별히 0.5 불투명도로 inkCanvas를 만들었습니다.

private void GetCanvasRender(out CanvasRenderTarget renderTarget, float opacity) 
{ 
    CanvasDevice device = CanvasDevice.GetSharedDevice(); 
    renderTarget = new CanvasRenderTarget(device, (int)ink.ActualWidth, (int)ink.ActualHeight, 96); 
    using (var ds = renderTarget.CreateDrawingSession()) 
    { 
     ds.Clear(Colors.Transparent); 
     using (ds.CreateLayer(opacity)) 
     { 
      ds.DrawInk(ink.InkPresenter.StrokeContainer.GetStrokes()); 
     } 
    } 
} 
+0

감사합니다. – andreask