Я не уверен, как это спросить. У меня есть приложение UWP, которое фиксирует чернильные штрихи в виде больших двоичных объектов и отправляет их в службу, которая декодирует их обратно в PNG или другие форматы изображений.
Первоначально чернильные мазки работали нормально. Я смог захватить чернила и преобразовать их обратно в изображение. Но в последнее время я заметил, что чернильные штрихи все еще сохраняются в BLOB, но не те, которые я могу декодировать.
Это тип BLOB, которые я привык видеть ...
iVBORw0KGgoAAAANSUhEUgAAB0QAAAUvCAYAAAAhI1YPAAAAAXNSR0IArs4c[...]FOl/H86CXiFEsRU5ErkJggg==
И это те BLOB, которые я вижу сейчас ...
R0lGODlhjgHCAHAAACH5BAEAAAMALAAAAACOAcIAgQAAA/wAA/gAAAAL/nI+py+0[...]AAAAAAAAKjUQlzgAAAAA7
Я пытался сохранить изображения в различных типах форматов при использовании
Convert.FromBase64String ()
для преобразования BLOB в управляемый байтовый массив, но пока ничего не получалось.
Я знаю, что новые BLOB действительны, потому что некоторые онлайн-декодеры base64 способны генерировать изображение, которое я ожидаю. Кто-нибудь видел эти типы BLOB-объектов и знает, как правильно их декодировать?
ОБНОВЛЕНИЕ (по запросу)
public static void SampleForStackOverflow()
{
byte[] bytes = Convert.FromBase64String("R0lGODlhFgATAHAAACH5BAEAAAMALAAAAAAWABMAgQAAAAAA/gAA/wAAAAI1nI8jku262JtR0nWqia16DIHb542cSVohqJWJtk7Z6V7iZ6tkB88pzvv1gj8ZamhMKpdMQwEAIf7+APwGHQI+MAGQAUHz8wD2Xq9JmbmrFj3xo/prOzC0FlISTovE2rgnfpcOi5xAxOBymESobsE+RUdbqbyTWz0uFlZJn7lelx8qfs7F9U74cWifSZkoUdpAYWqcbZ8HKXZVEkaLBcUmKA0Ge1VU2H4I/0FAq4WFLM14HhihTILQiG6VQLRDsmlYT9TvL8nWZfDiqk2TFsUtPs+g3gMsSBVkBj8ACAACDRBlAhKIAGYCEogCRICA/AdFaGcCMpgAaAY+AE+pgAAARmgFBzg2C2lqa2wZHDIJAP7/BwEAwB5FMwkA/v8HAQDAHkU4BAD+/wEKjQVEg/yTX5JsCZmblYL+Kx34zERUUqqpw5cuXLGpXc3c73njvOc3bICD/EHfiDwOGqipmc3N3JuZhWKrUVV55cKxM3x473xzvObiUxNKqMCC/vuL++4wAAAAAAAAAACHeFLzwVgcQ1w1fBycRryn3Oz81NhfgSuKx4pLh7+HK4ePgXeGW40PkOOVZ5Wrk1+Q24CThJ9IVC2YzsPG38ipw6/BdcZnxvXDLcTTwfWN+Ct4jDkU+KO5KfkYuFzm2y+Fh5eDgJeGm4AHQufOMD4yjgAeFF0poDiLeTG493jNgIIDAAQgAADAQBWL5EEAAIBBAAAAQAAAAAAAAAAANPLkQQAAgEEAAABAAAAAAAD+AAAAcwrgQbPCjkEAAABAAAAAAAAAAABcjd9BAsyPQQAAAEAAAAAAAAAAAEPL00FyvKhBAAAAQAAAAAAAAAAAsyTDQSSqn0EAAABAAAAAAAAAAAAkUq5BZWmaQQAAAEAAAAAAAAAAAC7TlEHU+pNBAAAAQAAAAAAAAAAA/leWQZ0esUEAAABAAAAAAAAAAACyuaFBKIe+QQAAAEAAAAAAAAAAAB9/vEHsEN5BAAAAQAAAAAAAAAAAxo8AQoC1+UEAAABAAAAAAAAAAADTEw5CYjHKQQAAAEAAAAAAAAAAALztEkJfI7lBAAAAQAAAAAAAAAAA7WwOQqsHo0EAAACFQAAAAAAAAAAA8pkHQsdtl0EAAABAAAAAAAAAAAAU/AZCZ2GWQQAAAEAAAAAAAAAAAEVnBkIyeZVBAAAAQAAAAAAAAAAAd9IFQv6QlEEAAABAAAAAAAAAAAAKABQAsJ570CZF1AEKPwApY/AC0AAAAAASABUgAQAAAAAAAACo9jWkYAAAAAA7");
byte[] bytes2 = Convert.FromBase64String("iVBORw0KGgoAAAANSUhEUgAAABYAAAATCAYAAACUef2IAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAACJSURBVDhP3ZFbCsAgDAS197+zRRLw0V2TqF8dKIKYcd2mGKXIZ5N1dTAL83L20fU60619qj4RS8vOD2JfdwISV5pcq4hIVzTPRsf9k8fnCyInYjRQQfv4rG7yrnx850ni885VzLrav2ASrkSsHjSTWdITxAk6jv44jCGJpm+hnOmsC+688pek9AJuQCoVPgMNJwAAAABJRU5ErkJggg==");
Image image, image2;
using (MemoryStream ms = new MemoryStream(bytes))
{
image = Image.FromStream(ms, true);
}
using (MemoryStream ms2 = new MemoryStream(bytes2))
{
image2 = Image.FromStream(ms2, true);
}
image.Save("image.png");
image2.Save("image2.png");
if (image != null)
{ image.Dispose(); }
if (image2 != null)
{ image2.Dispose(); }
}
![enter image description here](https://i.stack.imgur.com/d8eXC.png)
Строка "R01GOD1" была преобразована в изображение и затем закодирована обратно в строку "iVBOR" с использованием сайта "http://freeonlinetools24.com/base64-image"
ОБНОВЛЕНИЕ 2
Ниже приведен пример кода процесса, который я использую в своем UWP для преобразования чернильного контейнера в строку base64, которую я затем могу отправить в службу.
private async static Task<string> WriteInkToBase64String(Windows.UI.Input.Inking.InkStrokeContainer inkContainer)
{
byte[] data;
Stream s = null;
MemoryStream ms = new MemoryStream();
Windows.Storage.Streams.InMemoryRandomAccessStream imras = new Windows.Storage.Streams.InMemoryRandomAccessStream();
try
{
await inkContainer.SaveAsync(imras);
s = imras.AsStream();
s.Position = 0;
s.CopyTo(ms);
data = ms.ToArray();
}
finally {
ms.Dispose();
if (s != null)
s.Dispose();
imras.Dispose();
}
return Convert.ToBase64String(data);
}