WPF: разрешить пользователю изменять размер изображений в RichTextBox - PullRequest
3 голосов
/ 10 января 2010

Есть ли в элементе управления RichTextBox в WPF метод, позволяющий пользователю изменять размер вставляемых изображений, или вам нужно разработать собственный метод для этого.

То, чего я пытаюсь достичь, показано ниже, скриншот WordPad, который делает то, что я хочу:

enter image description here

Примечания:

  • При чтении файла RTF в виде простого текста я обнаружил, что теги управления, относящиеся к размеру изображения, равны \picscalex100 и \picscaley100 (где 100 обозначает масштаб с 100%).

Так что, да, есть правильный способ или хитрость к этому? Какой-нибудь совет о том, как его программировать? Или я вообще смотрю на неправильный контроль?

Ответы [ 2 ]

5 голосов
/ 20 января 2010

Оказывается, вам нужно обернуть изображение в ResizingAdorner.

Прекрасная и простая реализация этого кода может быть найдена Марко Чжоу в http://msdn.microsoft.com/en-us/library/ms771714%28loband%29.aspx (второй пост).

Код для этого ResizingAdorner доступен в виде образца MSDN по адресу http://msdn.microsoft.com/en-us/library/ms771714%28loband%29.aspx

Вот VB.net эквивалент кода, который я сейчас использую

Dim img As Image
Sub AddImg() Handles btnAddImage.Click
    Dim dlg As New Microsoft.Win32.OpenFileDialog
    dlg.Filter = "Image Files(*.*) | *.*"
    If dlg.ShowDialog Then
        img = New Image
        AddHandler img.Loaded, AddressOf imgloaded
        img.Source = New BitmapImage(New Uri(dlg.FileName, UriKind.Absolute)) With {.CacheOption = BitmapCacheOption.OnLoad}
        Dim container As New BlockUIContainer(img)
        rtb.Document.Blocks.Add(container)
    End If
End Sub

Private Sub imgloaded(ByVal sender As Object, ByVal e As Windows.RoutedEventArgs)
    Dim al As AdornerLayer = AdornerLayer.GetAdornerLayer(img)
    If Not (al Is Nothing) Then
        al.Add(New SDKSample.ResizingAdorner(img))
    End If
End Sub

Образец ResizingAdorner потребует большого взлома, чтобы удовлетворить мои потребности, но какое прекрасное начало.

Надеюсь, кто-то еще найдет это полезным!

0 голосов
/ 31 июля 2018

Возможно, скопируйте изображение в Paint и измените его размер, а затем отправьте в RichTextBox в VB6. Изображения, размещенные непосредственно на VB6, имеют тенденцию искажаться. Любое изображение, скопированное из Paint в VB6, вставляется так же, как и в Paint. Я узнал об этом при копировании из PDF-изображения в RichTextBox.

...