2011-09-13 38 views
0

是有沒有辦法添加效果使用繪圖上下文的DrawText方法繪製文本?特別是我正在尋找一種發光效果。我目前正在起草類似這樣的文字(在我自己的形狀的OnRender是自UIElement繼承):添加gloweffect來繪製文本

... 
drawingContext.PushClip(new RectangleGeometry(textrect)); 
drawingContext.DrawText(formattedText, new Point(textrect.Left, textrect.Top)); 
drawingContext.Pop(); 
... 

,如果它是可能的輝光效果添加到繪製文字我也需要它來申請當隨後調用上述行的文本會發生變化(不知道這是否需要額外的努力)。

回答

1

我猜發光效果應用到適當的視覺效果,而不是繪製背景的成員,如DrawText的()調用。您可以考慮繪製視覺像TextBlock到圖形上下文...

<TextBox Width="200"> 
    <TextBox.BitmapEffect> 

    <!-- <BitmapEffectGroup> would go here if you wanted to apply more 
     then one effect to the TextBox. However, in this example only 
     one effect is being applied so BitmapEffectGroup does not need 
     to be included. --> 

    <!-- The OuterGlow is blue, extends out 30 pixels, has the 
     maximum noise possible, and is 40% Opaque. --> 
    <OuterGlowBitmapEffect GlowColor="Blue" GlowSize="30" Noise="1" 
    Opacity="0.4" /> 

    </TextBox.BitmapEffect> 
</TextBox> 

然後使用文本塊渲染爲圖像(或者你可以繪製成圖形上下文中還)

Visual theVisual = textBlock ; //Put the aimed visual here. 
    double width = Convert.ToDouble(theVisual.GetValue(FrameworkElement.WidthProperty)); 
    double height = Convert.ToDouble(
         theVisual.GetValue(FrameworkElement.HeightProperty)); 
    if (double.IsNaN(width) || double.IsNaN(height)) 
    { 
     throw new FormatException(
      "You need to indicate the Width and Height values of the UIElement."); 
    } 
    RenderTargetBitmap render = new RenderTargetBitmap(
      Convert.ToInt32(width), 
      Convert.ToInt32(this.GetValue(FrameworkElement.HeightProperty)), 
      96, 
      96, 
      PixelFormats.Pbgra32); 
    // Indicate which control to render in the image 
    render.Render(this); 
    Stream oStream = new MemoryStream(); 
    PngBitmapEncoder encoder = new PngBitmapEncoder(); 
    encoder.Frames.Add(BitmapFrame.Create(render)); 
    encoder.Save(oStream); 
    oStream.Flush(); 

讓我知道這是否有幫助....

+0

它的工作(.NET 3.5),但我會記住這是一個很好的備份方案,因爲我通過簡單地畫它恢復到其上繪製文本的文本框一個dropshadoweffect和模擬dropshadoweffect的簡單場景的瞬間兩次。它看起來很好,這很好,並且與.NET 4兼容。 – mtijn

1

在.NET 4中,UIElement.BitmapEffect已過時,不會呈現。相反,你需要使用UIElement.Effect屬性。有副作用較少可供選擇,但您可以創建使用DropShadowEffect用正確的屬性設置的發光效果。

看看這個資源:http://karlshifflett.wordpress.com/2008/11/04/wpf-sample-series-solution-for-the-obsolete-bitmapeffect-property-and-rendering-an-outerglowbitmapeffect/(注意,這個例子給Button增加了光芒,但它應該同樣適用於LabelTextBlock)。