WPF:允许用户在RichTextBox中调整图像大小

时间:2010-01-10 02:06:30

标签: wpf image resize richtextbox rtf

WPF中的RichTextBox控件中是否有方法允许用户调整插入的图像的大小,或者您是否必须为此设计自己的方法。

我想要实现的目标如下所示,写字板的屏幕截图正在做我想要的事情:

enter image description here

注意:

  • 以纯文本格式读取RTF文件我发现与图像大小相关的控制标记为\picscalex100\picscaley100(其中100表示​​缩放为100%)。

所以是的,有没有正确的方法或技巧呢?有关如何编程的任何建议吗?或者我是否完全看错了控制?

2 个答案:

答案 0 :(得分:5)

原来你需要将图像包裹在ResizingAdorner

可以在http://msdn.microsoft.com/en-us/library/ms771714%28loband%29.aspx由Marco Zhou(第二篇文章)找到这个代码的美丽而简单的实现。

ResizingAdorner的代码在http://msdn.microsoft.com/en-us/library/ms771714%28loband%29.aspx

作为MSDN示例提供

这是我正在使用的代码的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示例需要一些很好的黑客来满足我的需求,但这是一个很好的开始。

希望别人觉得这很有用!

答案 1 :(得分:-1)

也许将图像复制到Paint并相应地调整大小,然后发布到VB6中的RichTextBox。直接发布到VB6的图像容易失真。从“画图”复制到VB6的所有图像都将粘贴在“画图”中。从PDF图像复制到RichTextBox时,我发现了这一点。