【问题标题】:How to add text to a bitmap image programmatically? WPF如何以编程方式将文本添加到位图图像? WPF
【发布时间】:2014-03-20 09:42:08
【问题描述】:

我正在使用 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);

            }
        } 

【问题讨论】:

标签: c# wpf bitmap drawing


【解决方案1】:

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

【讨论】:

  • 我现在明白了,将文本块放在图像上并在需要时设置可见性。我将如何将另一个图像添加到图像源,应该将其绘制到提要中还是放在 xaml 上?跨度>
  • 我不确定我是否完全理解您的意思。你能详细说明你想做什么吗?
【解决方案2】:

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

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,因为我目前无法直接向其写入文本。

您也可以使用 WriteableBitmapEx : https://writeablebitmapex.codeplex.com/

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

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

【讨论】:

  • 您好,感谢您的回答,我还有一个问题要解决。如何在位图上放置图像,例如汽车的图像文件?我必须将其绘制到屏幕上还是最好的方法是什么?
  • 如果您的图像是一个文件(PNG 等 ...),请创建一个 BitmapImage(这是一个 BitmapSource 顺便说一句)并将其绘制在上面的上下文中。如果您的图像是Image 控件,那么它的Source 属性是ImageSource,您可以将其转换为BitmapImage。看看类的层次结构:msdn.microsoft.com/en-us/library/…。否则,请使用问题示例更新您的问题。
  • 我发布了一个与此相关的新问题,如果你有时间可以看看你的吗? stackoverflow.com/questions/21915705/…
  • 你终于做到了?太棒了:D
  • 是的,我还在我的问题中添加了不起作用的绘图代码的实现。你能解释一下它为什么不起作用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多