2017-11-14 10 views
0

좋은 아침에 StackOverflow,저장 이미지 그럼 난 나를 천천히 미치게되는 시나리오를 오늘에 와서

윈폼에서로드. 당신이 이것을 도와 줄 수 있기를 희망합니다. 가능한 것이 틀림 없습니다. 그러나 나는 그것을 스스로 해결할 수 없습니다.

제 문제는 현재 두 개의 다른 응용 프로그램에서 작업하고 있다는 것입니다. 첫 번째는 내부 메일 시스템 용 패키지를 제공하는 UWP 응용 프로그램입니다. 여기서 아이디어는 패키지를 받으면 사람이 InkCanvas 서명을 사용하여 응용 프로그램에 서명한다는 것입니다. 그런 다음 바이트 배열로 데이터베이스에 저장 한 다음 일반 WinForm 또는 WebForm 응용 프로그램에서 다시로드해야합니다 (현재 WinForm을 먼저 수행하고 있습니다). 그러나 필자는 UWP에서 가져온 WriteableBitmap과 WinForms에서로드해야하는 일반 Bitmap 사이의 변환에 절대적으로 걸림돌이됩니다. 어떤 아이디어?

UWP 이미지를 저장 :

는 여기에 내가 현재하고있어 무엇

private byte[] SaveImage() 
{ 
    var canvasStrokes = SignatureCanvas.InkPresenter.StrokeContainer.GetStrokes(); 

    if (canvasStrokes.Count > 0) 
    { 
     var width = (int) SignatureCanvas.ActualWidth; 
     var height = (int) SignatureCanvas.ActualHeight; 
     var device = CanvasDevice.GetSharedDevice(); 
     var renderTarget = new CanvasRenderTarget(device, width, height, 96); 

     using (var drawingSession = renderTarget.CreateDrawingSession()) 
     { 
      drawingSession.Clear(Colors.White); 
      drawingSession.DrawInk(SignatureCanvas.InkPresenter.StrokeContainer.GetStrokes()); 
     } 
     return renderTarget.GetPixelBytes(); 
    } 
    return null; 
} 

그런 다음 나는 데이터베이스에 바이트를 저장하고 윈폼 응용 프로그램의 데이터베이스에서 그들을 끌어 ... 그래서 나는 여기서 몇 가지 실수를 저지르고 있는가? 서명을 잘못된 형식으로 읽었습니까? 또는 형식을 다른 형식으로 변환하려면 더 많은 작업을 수행해야합니까?

StackOverflow 페이지에서 여러 가지 결과를 시도한 후에 내가 잘못하고있는 것을 알지 못합니다.

도움이 될 것입니다! 그리고 내가 바보 같은 짓을했다면 미안해.

답변

1

실제로 데이터베이스에 원시 비트 맵 데이터를 저장하고 있습니다. Winform 임포터가 어떻게 작동했는지 기억이 나지 않지만 원시 비트 맵 데이터를 가져올 수 있을지는 의문입니다.

먼저 원시 데이터를 PNG 또는 JPEG 이미지로 인코딩하고 결과를 저장해야합니다. WinForm에서 읽을 수 있어야하는 일반 이전 이미지 파일로 끝납니다.

using (IRandomAccessStream stream = /* the stream where you want to save the data */) 
{ 
    byte[] bytes = renderTarget.GetPixelBytes();     

    var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.JpegEncoderId, stream); 
    encoder.SetPixelData(BitmapPixelFormat.Bgra8, 
           BitmapAlphaMode.Ignore, 
           (uint)canvas.Width, (uint)canvas.Height, 
           96, 96, bytes); 

    await encoder.FlushAsync(); 
} 
+0

감사합니다. 감사합니다. 너는 내 절대 영웅이야! 나는 +1을 주겠지 만 등록하기에 충분한 담당자가 아직 없습니다. – Alexis