Quiero agregar un fragmento de texto a una imagen en UWP. Cuando uso Microsoft.Graphics.Canvas.Text en win2D, acaba de crear una imagen con Text. Entonces, ¿cómo podría agregar un texto a una imagen existente? Gracias, así

enter image description here

-1
user7292847 13 dic. 2016 a las 22:38
Yap, pero la UWP no tiene gráficos ... solo tiene win2D ...
 – 
user7292847
13 dic. 2016 a las 23:21
Lo busqué en Google ... blog.okazuki.jp/entry/2016/03/ 03/125445
 – 
Trey
13 dic. 2016 a las 23:46
¿Alguna actualización? ¿Mi respuesta resolvió tu problema?
 – 
Jayden
4 ene. 2017 a las 06:19
 – 
user7292847
20 jun. 2019 a las 03:26

1 respuesta

La mejor respuesta

Como comentario de @ Trey, deberíamos poder usar Win2d en UWP. Para instalar Win2D.uwp, ejecute el siguiente comando en la Consola del Administrador de paquetes

Install-Package Win2D.uwp

Deberíamos poder usar el método CanvasBitmap.LoadAsync para cargar un mapa de bits desde una secuencia. Luego podemos usar el método CanvasRenderTarget.CreateDrawingSession para devolver una nueva sesión de dibujo que podemos usar para dibujar la imagen y el texto en la sesión de dibujo.

Por fin deberíamos poder escribir el CanvasRenderTarget en el archivo.

Por ejemplo:

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();
}
3
Jayden 19 dic. 2016 a las 09:37
Yap :) muchas gracias aunque lo había arreglado.
 – 
user7292847
5 may. 2017 a las 23:39