【问题标题】:How to generate a image with text and images in C#如何在 C# 中生成带有文本和图像的图像
【发布时间】:2013-02-05 05:25:06
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • Graphics中没有合适的静态方法?
  • 看来Graphics.FromImage() 就够了。我曾经认为这个方法返回的实例会被用来影响MeasureString()的返回值。事实证明,该实例与 MeasureString() 无关。我从大小为 (1, 1) 的位图中获取 Graphics 实例,而 MeasureString() 工作得很好!我得到另一个实例作为背景来生成图片 \^o^/
  • 如果您没有原始图像但您知道它的大小,您也可以将Image 创建为new Bitmap(width, height) 并将其用作Graphics.FromImage() 方法中的模拟对象。

标签: c# wpf image image-processing


【解决方案1】:
【解决方案2】:

对于人们如何对 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;
    }

【讨论】:

    猜你喜欢
    • 2014-04-12
    • 1970-01-01
    • 2011-10-04
    • 2012-02-25
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    相关资源
    最近更新 更多