Преобразование чернил в Base64, а затем в изображение позволяет обрезать фигуры

Я использую функцию ниже, чтобы преобразовать некоторые формы чернил, которые я нарисовал в элементе управления Picturebox, в Base64

  Function GetBase64(ByVal InkCollector As InkCollector) As String
    Dim utf8 As UTF8Encoding = New UTF8Encoding()
    InkCollector.Enabled = False
    Return utf8.GetString(InkCollector.Ink.Save(PersistenceFormat.Base64InkSerializedFormat, CompressionMode.Maximum))
    InkCollector.Enabled = True
  End Function

Затем я могу использовать строку для воспроизведения эскиза в новом изображении, передав его этой функции:

  Function Base64toImage(ByVal Base64 As String) As System.Drawing.Image
    Dim utf8 As UTF8Encoding = New UTF8Encoding()
    Dim imgSig As System.Drawing.Image
    Dim tmploadedInk As Ink = New Ink()
    Dim strGIF As String
    Dim imageBytes() As Byte
    Dim MS As MemoryStream

    'Load the Base64 String in Format(PersistenceFormat = Base64InkSerializedFormat) as ink
    tmploadedInk.Load(utf8.GetBytes(Base64))
    'Convert the ink to Base64 String in format (PersistenceFormat.Gif, CompressionMode.Maximum)
    strGIF = Convert.ToBase64String(tmploadedInk.Save(PersistenceFormat.Gif, CompressionMode.Maximum))
    'Convert Base64 String to Byte Array
    imageBytes = Convert.FromBase64String(strGIF)

    MS = New MemoryStream(imageBytes, 0, imageBytes.Length)

    ' Convert byte[] to Image
    MS.Write(imageBytes, 0, imageBytes.Length)

    imgSig = Image.FromStream(MS, True)

    Return imgSig
  End Function

Это работает хорошо, за исключением того факта, что формы обрезаются и, следовательно, они выровнены по верхнему левому углу сгенерированного изображения. Если я использую строку кода, как показано ниже:

PictureBox1.Image = Signiture.Base64toImage(Signiture.GetBase64(Sketch_InkCollector))

Фигуры появляются в левом верхнем углу и игнорируют тот факт, что они могли быть нарисованы в центре оригинальной графической рамки. Я считаю, что данные позиционирования должным образом сохраняются в строке Base64, но почему-то игнорируются, когда фигуры передаются в переменную изображения. Причина, по которой я так считаю, заключается в том, что когда я использую приведенную ниже функцию со строкой Base64, фигуры правильно помещаются в исходное положение.

  Sub SetBase64PictureBox(ByVal InkCollector As InkCollector, ByVal PictureBox As PictureBox, ByVal Base64 As String)
    Dim loadedInk As Ink = New Ink()
    Dim utf8 As UTF8Encoding = New UTF8Encoding()
    InkCollector.Enabled = False
    InkCollector.Ink.DeleteStrokes()        ' Clear all strokes
    loadedInk.Load(utf8.GetBytes(Base64))
    InkCollector.Ink = loadedInk
    InkCollector.Enabled = True
    PictureBox.Invalidate()
  End Sub

Спасибо

Обновить:

Нашел временное решение по этой ссылке:

Управление InkPicture - Как сохранить чернила и изображение в файл изображения

Это не совсем то, что мне было нужно, но конечный результат тот же, так как я хотел, чтобы комбинированное изображение и чернила наносились на изображение для показа в файле PDF.

0 ответов

Другие вопросы по тегам