0

我在这些段落之间有几段文字和几张图片。

现在,我想使用这些材料生成一张图片,将它们垂直合并。但是文本和图片的所有块的宽度不能大于生成图片的宽度,这意味着我必须缩小原始图片,并将每段文字填充成一个矩形以适应宽度。

这是困难的事情:要确定包含文本的矩形的大小,我需要使用Graphics.MeasureString()方法,该方法需要一个用于生成图片的 Graphics 实例(现在,我使用的是空白模板图片)。但是直到我弄清楚矩形和图片的所有大小之前,我才知道这个 Graphics 的确切大小。

有什么方法可以在没有源图像的情况下获取 Graphics 的实例?

或者还有其他方法可以完成这项工作吗?

4

2 回答 2

0

对于人们如何对 WPF 解决方案感兴趣(如询问):

    public static BitmapSource CreateImage(string text, double width, double heigth)
    {
        // create WPF control
        var size = new Size(width, heigth);

        var stackPanel = new StackPanel();

        var header = new TextBlock();
        header.Text = "Header";
        header.FontWeight = FontWeights.Bold;

        var content = new TextBlock();
        content.TextWrapping = TextWrapping.Wrap;
        content.Text = text;

        stackPanel.Children.Add(header);
        stackPanel.Children.Add(content);

        // process layouting
        stackPanel.Measure(size);
        stackPanel.Arrange(new Rect(size));

        // Render control to an image
        RenderTargetBitmap rtb = new RenderTargetBitmap((int)stackPanel.ActualWidth, (int)stackPanel.ActualHeight, 96, 96, PixelFormats.Pbgra32);
        rtb.Render(stackPanel);
        return rtb;
    }
于 2019-01-31T09:42:32.223 回答