добавить эффект свечения к нарисованному тексту - PullRequest
0 голосов
/ 13 сентября 2011

Есть ли способ добавить эффекты к тексту, нарисованному с помощью DrawText метода контекста рисования? в частности я ищу эффект свечения. В настоящее время я рисую такой текст (в OnRender моей собственной формы, который наследуется от UIElement):

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

и, если возможно добавить эффект свечения к нарисованному тексту, мне также нужно применить его, когда текст изменяется при последующих вызовах вышеупомянутой строки (не знаю, требует ли это дополнительных усилий).

Ответы [ 2 ]

1 голос
/ 13 сентября 2011

В .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, но оно должно применяться в равной степени к Label или TextBlock).

1 голос
/ 13 сентября 2011

Полагаю, эффекты свечения применяются к соответствующим визуальным элементам, а не к элементам контекста рисования, таким как вызовы 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();

Дайте мне знать, если это поможет ....

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...