【问题标题】:How do you draw a string to a Bitmap in Silverlight?如何在 Silverlight 中将字符串绘制到位图?
【发布时间】:2010-02-09 23:36:56
【问题描述】:

在普通的 C# 中,使用 Grpahics.DrawString() 方法很容易绘制位图。 Silverlight 似乎已经取消了位图对象,并且图形也不再可用。那么...我在使用 Silverlight 时如何操作/创建位图?如果有帮助,我正在使用 Silverlight 3。

让我告诉你我在做什么。我得到了一个模板,基本上是一个预渲染的图像。然后,用户可以从多个图像中进行选择并输入所需的文本。然后我将它渲染到图像,调整大小等......在范围内并将其居中在图像的预定义区域中。如果我可以计算大小(如在 MeasureString 方法中)然后绘制字符串(如在 Graphics.DrawString 方法中),那很好。真正的问题是,无论我为什么要能够做到这一点,是否可以做到?

【问题讨论】:

  • 那些提供建议的人总是担心它是否适合手头的问题。不知道为什么有人想做某事(尤其是表面上看起来不明智的事情)让我们感到不舒服。提供为什么的原因可能允许某人提供您可能尚未考虑过的更后期的解决方案。

标签: c# silverlight-3.0 bitmap image-manipulation


【解决方案1】:

问题是:你为什么要这样做?为什么不直接使用TextBlock

如果您尝试动态生成图像,请使用标准 Silverlight/WPF 控件(包括 TextBlock)和 renderWritableBitmap

编辑:

好的,您已经更新和扩展,这让我有更多的工作要做。不幸的是,你不会喜欢这个答案。首先,请记住,Silverlight 和 WPF 通常是基于矢量的,并且旨在用作此类。尽管 Canvas 允许您进行伪像素操作,但您不能像老式 GDI 那样精确到像素。这是你的媒介的一个因素。如果您绝对必须以您想要的方式测量事物,我建议您在远程服务器上构建图像并将它们传输到您的 Silverlight 应用程序。

您可以使用 ActualWidth 和 ActualHeight 属性计算通过 TextBlock 呈现的文本在屏幕上的大小。但它只适用于已经渲染的控件。 Silverlight 中根本没有像 MeasureString 这样的东西。根据您对应用程序的描述,一些用户交互可以完成您想要的。用户选择图像,输入文本,并显示预览。然后,用户可以调整各种文本区域的宽度和高度,直到满意为止,此时您可以使用上面我喜欢的渲染方法拍摄快照。

【讨论】:

  • 好的...那我该怎么做呢?让我告诉你我在做什么。我得到了一个模板,基本上是一个预渲染的图像。然后,用户可以从多个图像中进行选择并输入所需的文本。然后我将它渲染到图像,调整大小等......在范围内并将其居中在图像的预定义区域中。如果我可以计算大小(如在 MeasureString 方法中),然后使用您的技术绘制给定的字符串(如在 Graphics.DrawString 方法中),那就没问题了。真正的问题是,无论我为什么要能够做到这一点,是否可以做到?
  • @Spencer:您应该将该评论移至您的问题中。
  • 答案不是我所希望的,但它似乎是唯一可行的方法。那谢谢啦! :)
  • 很高兴我能帮上忙。祝你好运!
【解决方案2】:

以下可能会起作用,它有点模糊,因为我自己还没有尝试过。

您要查找的对象是WritableBitmap

您创建一个可视化树,例如创建自己的 GridCanvas(您不会将其添加到 UI)。将选定的图像和一个 TextBlock 添加到它,根据您的喜好定位和调整大小。

创建一个新的WritableBitmap 或者使用特定大小或者使用选择的图像来初始化它。

使用WritableBitmap Render 方法将上述根GridCanvas 传递给它。

现在你有了一个位图,你应该可以用它来做任何你需要做的事情,首先需要所有这些箍跳。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多