在普通的C#中,使用Grpahics.DrawString()方法可以很容易地绘制到位图。 Silverlight似乎已经废除了Bitmap对象,而且Graphics也不再可用。那么......在使用Silverlight时,我的意思是如何操作/创建位图?如果有帮助,我使用Silverlight 3。
让我告诉你我在做什么。我正在获得一个模板,基本上是一个预渲染的图像。然后,用户可以从多个图像中进行选择并输入所请求的文本。然后我将它渲染到图像,调整大小等...在边界内并将其居中在图像的预定义区域。如果我可以计算大小(如在MeasureString方法中),然后绘制字符串(如在Graphics.DrawString方法中),这将是好的。真正的问题,无论我为什么要这样做,都能做到吗?
答案 0 :(得分:3)
问题是:你为什么要这样做?为什么不使用TextBlock?
如果您尝试动态生成图像,请使用标准的Silverlight / WPF控件(包括TextBlock)和render个WritableBitmap。
修改强>
好的,你已经更新和扩展,这让我有更多的继续。不幸的是,你不会喜欢这个答案。首先,请记住,Silverlight和WPF通常是基于矢量的,并且打算用作这样的。虽然Canvas允许你进行伪像素操作,但你不能像老式GDI一样像素精确。这是你的媒介的一个因素。如果您必须按照您想要的方式测量它们,我建议您在远程服务器上构建图像并将它们传输到Silverlight应用程序。
您可以使用ActualWidth和ActualHeight属性计算通过TextBlock呈现的文本的屏幕大小。但它只适用于已经渲染的控件。像MeasureString这样的东西在Silverlight中根本不可用。根据您对应用的描述,某些用户互动可以实现您的目标。用户选择图像,输入文本,并显示预览。然后,用户可以调整各个文本区域的宽度和高度,直到满意为止,此时您可以使用我喜欢的渲染方法拍摄快照。
答案 1 :(得分:3)
以下可能有用,有点模糊,因为我还没有尝试过。
您要查找的对象是WritableBitmap
。
您创建一个可视树,例如创建一个Grid
或Canvas
(您不会将其添加到UI)。添加所选图像和根据您的喜好定位和调整大小的TextBlock。
创建一个特定尺寸的新WritableBitmap
或使用所选图像进行初始化。
使用WritableBitmap
Render
方法将上述根Grid
或Canvas
传递给它。
现在你有一个位图,你应该可以用来做你需要做的任何事情,这需要所有这些箍首先跳跃。