Сохранение изображения в UWP с последующей загрузкой в WinForms
Доброе утро, Stackru,
Я пришел к вам сегодня со сценарием, который сводит меня с ума медленно. Я надеюсь, что вы можете помочь мне с этим, так как я уверен, что это должно быть возможно, но я не могу решить это сам.
Моя проблема в том, что я сейчас работаю над двумя разными приложениями. Первое - это приложение UWP для доставки пакетов для внутренней почтовой системы. Идея заключается в том, что после получения пакета человек подпишет приложение, используя подпись InkCanvas. Затем он должен быть сохранен в базе данных в виде байтового массива, а затем перезагружен в приложении WinForm или WebForm (сейчас я делаю WinForm сначала) в виде обычного старого файла образа. Тем не менее, я абсолютно застрял при преобразовании между WriteableBitmap, который я получаю из UWP, и обычным растровым изображением, которое мне нужно загрузить в WinForms. Есть идеи?
Вот что я сейчас делаю:
Сохранение изображения 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;
}
Затем я сохраняю байты в базе данных и вытаскиваю их из базы данных в приложении WinForms... поэтому я здесь совершаю ошибку? Я читаю подпись в неправильном формате? Или мне нужно сделать что-то еще, чтобы преобразовать форматы из одного в другой?
Я в замешательстве, попробовав много разных результатов со страниц Stackru, я не знаю, что я делаю неправильно.
Любая помощь будет потрясающей! И извините, если я сделал что-то глупое.
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();
}