簡體   English   中英

如何在Silverlight中將字符串繪制到位圖?

[英]How do you draw a string to a Bitmap in Silverlight?

在普通的C#中,使用Grpahics.DrawString()方法很容易繪制到位圖。 Silverlight似乎已經取消了Bitmap對象,並且Graphics也不再可用。 那么...使用Silverlight時我該如何操作/創建位圖? 如果有幫助,我正在使用Silverlight 3。

讓我告訴你我在做什么。 我得到一個模板,基本上是一個預渲染的圖像。 然后,用戶可以從多個圖像中進行選擇並輸入所需的文本。 然后,將其渲染到圖像上,在范圍內調整大小等,並將其居中在圖像的預定義區域中。 如果我可以計算大小(如在MeasureString方法中),然后繪制字符串(如在Graphics.DrawString方法中),那會很好。 真正的問題,無論我為什么想要做到這一點,都能做到嗎?

問題是:為什么要這么做? 為什么不只使用TextBlock

如果您嘗試動態生成圖像,請使用標准的Silverlight / WPF控件(包括TextBlock)並將其呈現WritableBitmap

編輯:

好的,您已經更新和擴展了,這使我有更多工作要做。 不幸的是,您不會喜歡這個答案。 首先,請記住,Silverlight和WPF通常是基於矢量的,並且打算照此使用。 盡管“畫布”允許您執行偽像素操作,但是您不能像老式GDI那樣精確到像素。 這是您的媒介因素。 如果您絕對必須以想要度量的方式度量事物,建議您在遠程服務器上構建圖像並將其傳輸到Silverlight應用程序。

您可以使用ActualWidth和ActualHeight屬性來計算通過TextBlock呈現的文本在屏幕上的大小。 但這僅適用於已經渲染的控件。 像MeasureString這樣的東西在Silverlight中根本不可用。 根據您對應用程序的描述,某些用戶交互可以完成您想要的操作。 用戶選擇圖像,輸入文本,並顯示預覽。 然后,用戶可以調整各個文本區域的寬度和高度,直到滿意為止,此時,您可以使用我上面喜歡的渲染方法拍攝快照。

以下可能有效,因為我還沒有嘗試過,所以有點模糊。

您要查找的對象是WritableBitmap

您創建了一個可視樹,例如,將自己創建為GridCanvas (沒有將其添加到UI)。 向其添加選定的圖像以及一個TextBlock,其位置和大小可根據需要選擇。

創建一個特定大小的新WritableBitmap或使用選定的圖像對其進行初始化。

使用WritableBitmap Render方法將上面的根GridCanvas傳遞給它。

現在,您已經有了一個位圖,您應該可以使用該位圖來完成需要做的所有事情,而這首先需要進行所有的跳動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM