Изображения, обрезанные (растянутые) при перетаскивании из Outlook в приложение .net - PullRequest
1 голос
/ 07 мая 2019

У нас есть приложение, которое пользователи перетаскивают файлы со своего рабочего стола или из внешнего вида на. Это очень хорошо работает для реальных файлов, для реальных электронных писем и для вложений в электронные письма ... что не работает, когда пользователь перетаскивает изображение, встроенное в электронное письмо. Мы можем получить изображение, но только в некотором роде ... оно сохраняется с правильными размерами, но изображение слишком широкое (растянуто ... или разрешение выключено или что-то в этом роде).

Мы пробовали тонну поисков в Google, все, что мы можем придумать в отношении объекта, который мы получаем от DragEventArgs.

   Private Sub ProcessDroppedAttachmentMeta(e As DragEventArgs, Optional ByVal node As TreeNode = Nothing)
        Dim dataObject As System.Windows.Forms.DataObject = e.Data
        Dim Image As System.Drawing.Image = dataObject.GetImage

        Dim savePath As String = "C:\temp\testfile.bmp" 

        Image.Save(savePath)

    End Sub

Как заставить это изображение правильно сохранить?

Ответы [ 3 ]

0 голосов
/ 08 мая 2019

Если изображение имеет ширину 800 пикселей, а ваша электронная почта имеет ширину 600 пикселей, Outlook отобразит изображение шириной 800 пикселей. Outlook игнорирует встроенные таблицы стилей, чтобы установить размер. Лучший способ заставить Outlook отображать желаемую ширину - это что-то вроде этого:

<img src="#" width="580" />

Поскольку Outlook игнорирует встроенную таблицу стилей и все прикрепленные классы CSS, вы можете использовать их для точной настройки отображения электронной почты в различных других почтовых клиентах. Как пример, для мобильного телефона:

<img src="#" width="580" style="max-width: 100%;" />

Outlook продолжит отображать изображение с разрешением 580 пикселей, и если область просмотра изменится на 425 пикселей, он может изменить свой размер, чтобы он соответствовал меньшему размеру.

Удачи.

0 голосов
/ 08 мая 2019
  Dim html As String = dataObject.GetData(DataFormats.Html)
    Dim embeddedImagePaths As New List(Of String)
    Dim txtsearch As New TextParser.ParseTracker(html)
    Dim nextImagePath As String = String.Empty

    Do
        nextImagePath = TextParser.ParseTracker.getText(txtsearch, "<v:imagedata src=""file:///", """")
        If Not String.IsNullOrWhiteSpace(nextImagePath) Then embeddedImagePaths.AddUnique(nextImagePath)
    Loop While Not String.IsNullOrWhiteSpace(nextImagePath)

    For Each f As String In embeddedImagePaths
        File.Copy(f, "C:\temp\" & IO.Path.GetFileName(f), True)
    Next
0 голосов
/ 07 мая 2019

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

Dim graphics As System.Drawing.Graphics = Me.CreateGraphics 'Get the resolution from the current form
Dim imageClone As New Bitmap(image)
imageClone.SetResolution(graphics.DpiX, graphics.DpiY)
PlaceWhereINeedTheImage.Image = imageClone

Это своего рода выстрел в темноте, поскольку эти проблемы трудно устранить, но попробовать стоит.Удачи!

...