如何以编程方式将文本添加到位图图像? WPF

时间:2014-02-19 19:56:16

标签: c# wpf bitmap drawing

我正在使用Kinect传感器通过将视频输入设置为位图源来显示图像上的视频输入,如下所示。但我的问题是如何在图像/位图中添加文本,例如分数计数器,我在下面添加了一张图片,以显示我想要实现的目标。

void myKinect_ColorFrameReady(object sender, ColorImageFrameReadyEventArgs e)
        {
            using (ColorImageFrame colorFrame = e.OpenColorImageFrame())
            {

                if (colorFrame == null) return;
                byte[] colorData = new byte[colorFrame.PixelDataLength];
                colorFrame.CopyPixelDataTo(colorData);

                 KinectVideo.Source = BitmapSource.Create(colorFrame.Width, colorFrame.Height, 96, 96,
                    PixelFormats.Bgr32, null, colorData, colorFrame.Width * colorFrame.BytesPerPixel);

            }
        } 

Kinect video feed with overlay text

2 个答案:

答案 0 :(得分:16)

您可以使用DrawingVisualDrawingImage类来实现此目的:

enter image description here

var random = new Random();
var pixels = new byte[256 * 256 * 4];
random.NextBytes(pixels);
BitmapSource bitmapSource = BitmapSource.Create(256, 256, 96, 96, PixelFormats.Pbgra32, null, pixels, 256 * 4);
var visual = new DrawingVisual();
using (DrawingContext drawingContext = visual.RenderOpen())
{
    drawingContext.DrawImage(bitmapSource, new Rect(0, 0, 256, 256));
    drawingContext.DrawText(
        new FormattedText("Hi!", CultureInfo.InvariantCulture, FlowDirection.LeftToRight,
            new Typeface("Segoe UI"), 32, Brushes.Black), new Point(0, 0));
}
var image = new DrawingImage(visual.Drawing);
Image1.Source = image;

不幸的是,您必须创建一个新的BitmapSource,因为我目前无法直接将文字写入其中。

或者,您可以使用WriteableBitmapExhttps://writeablebitmapex.codeplex.com/

  • 使用BitmapFactory(1)
  • 从您的框架创建WriteableBitmap
  • 使用上述方法(2)
  • 创建另一个WriteableBitmap并在其上绘制文本
  • 在您的框架(1)
  • 上显示文本位图(2)

结果相同但方法不同,不确定方法2是否更好,因为它很麻烦。

答案 1 :(得分:2)

您无需将文本绘制到图像本身。在您的XAML中,只需在更高的Z顺序添加一个TextBlock控件。