我想在UWP中的图像中添加一段文字。当我在win2D中使用Microsoft.Graphics.Canvas.Text时,它只是用Text创建了一个图像。那么如何在现有图像中添加文字呢?谢谢。喜欢这个
答案 0 :(得分:2)
正如@ Trey的评论,我们应该可以在UWP中使用Win2d。 要安装Win2D.uwp,请在程序包管理器控制台中运行以下命令
Install-Package Win2D.uwp
我们应该能够使用CanvasBitmap.LoadAsync
方法从流中加载位图。然后我们可以使用CanvasRenderTarget.CreateDrawingSession
方法返回一个新的绘图会话,我们可以用它将图像和文本绘制到绘图会话中。
最后,我们应该能够将CanvasRenderTarget
写入文件。
例如:
var picker = new FileOpenPicker();
picker.FileTypeFilter.Add(".png");
picker.FileTypeFilter.Add(".jpg");
picker.FileTypeFilter.Add(".jpeg");
var sourceFile = await picker.PickSingleFileAsync();
if (sourceFile == null) { return; }
var device = CanvasDevice.GetSharedDevice();
var image = default(CanvasBitmap);
using (var s = await sourceFile.OpenReadAsync())
{
image = await CanvasBitmap.LoadAsync(device, s);
}
var offscreen = new CanvasRenderTarget(
device, (float)image.Bounds.Width, (float)image.Bounds.Height, 96);
using (var ds = offscreen.CreateDrawingSession())
{
ds.DrawImage(image, 0, 0);
ds.DrawText("Hello world", 10, 10, Colors.Blue);
}
var displayInformation = DisplayInformation.GetForCurrentView();
var savepicker = new FileSavePicker();
savepicker.FileTypeChoices.Add("png", new List<string> { ".png" });
var destFile = await savepicker.PickSaveFileAsync();
using (var s = await destFile.OpenAsync(FileAccessMode.ReadWrite))
{
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.PngEncoderId, s);
encoder.SetPixelData(
BitmapPixelFormat.Bgra8,
BitmapAlphaMode.Ignore,
(uint)offscreen.Size.Width,
(uint)offscreen.Size.Height,
displayInformation.LogicalDpi,
displayInformation.LogicalDpi,
offscreen.GetPixelBytes());
await encoder.FlushAsync();
}