c# windows-runtime windows-phone windows-phone-8.1

c# - Windows Phone 8.1-Escribir texto sobre WriteableBitmap



windows-runtime windows-phone (1)

La funcionalidad análoga a WriteableBitmap.Render para aplicaciones de Windows Runtime es RenderTargetBitmap . La forma más sencilla de dibujar texto en un mapa de bits es colocar su mapa de bits y un Bloque de texto con el texto en una cuadrícula o lienzo y luego llamar RenderTargetBitmap en el lienzo del contenedor para convertir la imagen combinada + texto en un nuevo mapa de bits.

Otras alternativas son interoperar con DirectWrite para dibujar texto en la capa de DirectX, o usar un paquete de gráficos de trama externo como Win2D o WriteableBitmapEx (no estoy seguro si WriteableBitmapEx puede hacer texto en Windows Phone).

En una aplicación que estoy haciendo, necesito escribir texto sobre WriteableBitmap. En Windows Phone Silverlight, sé cómo hacerlo: solo necesito llamar al método writeableBitmap.Render (), ¡eso es todo! El problema es que mi aplicación debe compilarse con Windows Runtime, y ese método no existe. Mi primer enfoque fue escribir un método que realiza el dibujo de números (solo necesito dibujar números) sobre el WriteableBitmap, pero, con este método, los números aparecen un poco "robóticos", son todos cuadrados y definitivamente no se ven muy agradable. Entonces, ¿hay alguna solución para lograr lo que quiero? Quiero decir: ¿podría ayudarme a terminar mi método para dibujar números bonitos? o ... ¿conoces alguna forma de ocultar símbolos de fuente en png, y luego llamar a writeableBitmap.Blit () y luego cambiar el tamaño de ese elemento de fuente (cada número) en consecuencia?

Gracias por adelantado.

Mi código es el siguiente:

private void DrawStringAsLines(string text, WriteableBitmap writBmp, int startX, int startY) { int x = startX; int y = startY; //int radius = 1; int size = 2; int rectangleHeight = writBmp.PixelHeight / 40; int rectangleWidth = writBmp.PixelWidth / 40; int whiteSpaceSize = rectangleWidth / 2; x -= ((rectangleWidth + whiteSpaceSize) * text.Length); y -= (rectangleHeight + whiteSpaceSize + size); foreach (char c in text) { switch (c) { case ''0'': { /*writBmp.DrawLine(10, 20, 50, 20, Colors.White); writBmp.DrawLine(10, 20, 10, 70, Colors.White); writBmp.DrawLine(10, 70, 50, 70, Colors.White); writBmp.DrawLine(50, 20, 50, 70, Colors.White);*/ /*writBmp.DrawLineAa(x, y, x + 20, y, Colors.Yellow); writBmp.FillEllipseCentered(x, y, 5, 5, Colors.Yellow); writBmp.DrawLineAa(x, y, x, y + 20, Colors.Yellow); writBmp.FillEllipseCentered(x, y, 5, 5, Colors.Yellow); writBmp.DrawLineAa(x, y + 20, x + 20, y + 20, Colors.Yellow); writBmp.FillEllipseCentered(x, y + 20, 5, 5, Colors.Yellow); writBmp.DrawLineAa(x + 20, y, x + 20, y + 20, Colors.Yellow); writBmp.FillEllipseCentered(x + 20, y, 5, 5, Colors.Yellow);*/ /*writBmp.DrawLineAa(x, y, x+20, y, Colors.Yellow); //for (int i = 0; i <= 20; i++ ) // writBmp.FillEllipseCentered(x+i, y, radius, radius, Colors.Yellow); writBmp.DrawLineAa(x, y, x, y + 20, Colors.Yellow); //for (int i = 0; i <= 20; i++) // writBmp.FillEllipseCentered(x, y+i, radius, radius, Colors.Yellow); writBmp.DrawLineAa(x, y + 20, x + 20, y + 20, Colors.Yellow); //for (int i = 0; i <= 20; i++) // writBmp.FillEllipseCentered(x+i, y + 20, radius, radius, Colors.Yellow); writBmp.DrawLineAa(x + 20, y, x + 20, y + 20, Colors.Yellow); //for (int i = 0; i <= 20; i++) // writBmp.FillEllipseCentered(x + 20, y + i, radius, radius, Colors.Yellow);*/ writBmp.FillRectangle(x, y, x + rectangleWidth + size, y + size, Colors.Yellow); writBmp.FillRectangle(x, y, x + size, y + rectangleHeight, Colors.Yellow); writBmp.FillRectangle(x + rectangleWidth + size, y, x + rectangleWidth + size + size, y + rectangleHeight, Colors.Yellow); writBmp.FillRectangle(x, y + rectangleHeight, x + rectangleWidth + size, y + rectangleHeight + size, Colors.Yellow); break; } case ''1'': { /*writBmp.DrawLineAa(x, y, x, y+20, Colors.Yellow); //for (int i = 0; i <= 20; i++) // writBmp.FillEllipseCentered(x, y + i, radius, radius, Colors.Yellow); writBmp.DrawLineAa(x, y, x - 10, y + 10, Colors.Yellow); //for (int i = 0; i <= 10; i++) // writBmp.FillEllipseCentered(x - i, y + i, radius, radius, Colors.Yellow);*/ writBmp.FillRectangle(x, y, x + (rectangleWidth / 2) + size, y + size, Colors.Yellow); writBmp.FillRectangle(x + (rectangleWidth / 2), y, x + (rectangleWidth / 2) + size, y + rectangleHeight + size, Colors.Yellow); break; } case ''2'': { /*writBmp.DrawLineAa(x, y, x + 20, y, Colors.Yellow); //for (int i = 0; i <= 20; i++) // writBmp.FillEllipseCentered(x + i, y, radius, radius, Colors.Yellow); writBmp.DrawLineAa(x + 20, y, x + 20, y + 10, Colors.Yellow); //for (int i = 0; i <= 10; i++) // writBmp.FillEllipseCentered(x + 20, y + i, radius, radius, Colors.Yellow); writBmp.DrawLineAa(x + 20, y + 10, x, y + 10, Colors.Yellow); //for (int i = 0; i <= 20; i++) // writBmp.FillEllipseCentered(x + i, y + 10, radius, radius, Colors.Yellow); writBmp.DrawLineAa(x, y + 10, x, y + 20, Colors.Yellow); //for (int i = 0; i <= 10; i++) // writBmp.FillEllipseCentered(x, y + 10 + i, radius, radius, Colors.Yellow); writBmp.DrawLineAa(x, y + 20, x + 20, y + 20, Colors.Yellow); //for (int i = 0; i <= 20; i++) // writBmp.FillEllipseCentered(x + i, y + 20, radius, radius, Colors.Yellow);*/ writBmp.FillRectangle(x, y, x + rectangleWidth, y + size, Colors.Yellow); writBmp.FillRectangle(x + rectangleWidth, y, x + rectangleWidth + size, y + (rectangleHeight / 2) + size, Colors.Yellow); writBmp.FillRectangle(x, y + (rectangleHeight / 2), x + rectangleWidth, y + (rectangleHeight / 2) + size, Colors.Yellow); writBmp.FillRectangle(x, y + (rectangleHeight / 2), x + size, y + rectangleHeight + size, Colors.Yellow); writBmp.FillRectangle(x, y + rectangleHeight, x + rectangleWidth + size, y + rectangleHeight + size, Colors.Yellow); break; } case ''3'': { /*writBmp.DrawLineAa(x, y, x + 20, y, Colors.Yellow); //for (int i = 0; i <= 20; i++) // writBmp.FillEllipseCentered(x + i, y, radius, radius, Colors.Yellow); writBmp.DrawLineAa(x + 20, y, x + 20, y + 10, Colors.Yellow); //for (int i = 0; i <= 10; i++) // writBmp.FillEllipseCentered(x + 20, y + i, radius, radius, Colors.Yellow); writBmp.DrawLineAa(x + 20, y + 10, x, y + 10, Colors.Yellow); //for (int i = 0; i <= 20; i++) // writBmp.FillEllipseCentered(x + i, y + 10, radius, radius, Colors.Yellow); writBmp.DrawLineAa(x + 20, y + 10, x + 20, y + 20, Colors.Yellow); //for (int i = 0; i <= 10; i++) // writBmp.FillEllipseCentered(x + 20, y + 10 + i, radius, radius, Colors.Yellow); writBmp.DrawLineAa(x + 20, y + 20, x, y + 20, Colors.Yellow); //for (int i = 0; i <= 20; i++) //writBmp.FillEllipseCentered(x + i, y + 20, radius, radius, Colors.Yellow);*/ writBmp.FillRectangle(x, y, x + rectangleWidth, y + size, Colors.Yellow); writBmp.FillRectangle(x + rectangleWidth, y, x + rectangleWidth + size, y + (rectangleHeight / 2), Colors.Yellow); writBmp.FillRectangle(x + (rectangleWidth / 2), y + (rectangleHeight / 2), x + rectangleWidth, y + (rectangleHeight / 2) + size, Colors.Yellow); writBmp.FillRectangle(x + rectangleWidth, y + (rectangleHeight / 2), x + rectangleWidth + size, y + rectangleHeight + size, Colors.Yellow); writBmp.FillRectangle(x, y + rectangleHeight, x + rectangleWidth, y + rectangleHeight + size, Colors.Yellow); break; } case ''4'': { /*writBmp.DrawLineAa(x, y, x, y + 10, Colors.Black); //for (int i = 0; i <= 10; i++) // writBmp.FillEllipseCentered(x, y + i, radius, radius, Colors.Yellow); writBmp.DrawLineAa(x, y + 10, x + 20, y + 10, Colors.Black); //for (int i = 0; i <= 20; i++) //writBmp.FillEllipseCentered(x + i, y + 10, radius, radius, Colors.Yellow); writBmp.DrawLineAa(x + 20, y, x + 20, y + 20, Colors.Black); //for (int i = 0; i <= 20; i++) //writBmp.FillEllipseCentered(x + 20, y + i, radius, radius, Colors.Yellow);*/ writBmp.FillRectangle(x, y, x + size, y + (rectangleHeight / 2), Colors.Yellow); writBmp.FillRectangle(x, y + (rectangleHeight / 2), x + rectangleWidth, y + (rectangleHeight / 2) + size, Colors.Yellow); writBmp.FillRectangle(x + rectangleWidth, y, x + rectangleWidth + size, y + rectangleHeight + size, Colors.Yellow); break; } case ''5'': { /*writBmp.DrawLine(x, y, x + 20, y, Colors.Yellow); for (int i = 0; i <= 10; i++) writBmp.FillEllipseCentered(x + i*2, y, radius*2, radius*2, Colors.Yellow); writBmp.DrawLine(x, y, x, y + 10, Colors.Yellow); for (int i = 0; i <= 5; i++) writBmp.FillEllipseCentered(x, y + i*2, radius*2, 2*radius, Colors.Yellow); writBmp.DrawLine(x, y + 10, x + 20, y + 10, Colors.Yellow); for (int i = 0; i <= 10; i++) writBmp.FillEllipseCentered(x + 2*i, y + 10, 2*radius, 2*radius, Colors.Yellow); writBmp.DrawLine(x + 20, y + 10, x + 20, y + 20, Colors.Yellow); for (int i = 0; i <= 5; i++) writBmp.FillEllipseCentered(x + 20, y + 10 + 2*i, 2*radius, radius*2, Colors.Yellow); writBmp.DrawLine(x + 20, y + 20, x, y + 20, Colors.Yellow); for (int i = 0; i <= 10; i++) writBmp.FillEllipseCentered(x + 2*i, y + 20, radius*2, radius*2, Colors.Yellow);*/ writBmp.FillRectangle(x, y, x + rectangleWidth + size, y + size, Colors.Yellow); writBmp.FillRectangle(x, y, x + size, y + (rectangleHeight / 2), Colors.Yellow); writBmp.FillRectangle(x, y + (rectangleHeight / 2), x + rectangleWidth, y + (rectangleHeight / 2) + size, Colors.Yellow); writBmp.FillRectangle(x + rectangleWidth, y + (rectangleHeight / 2), x + rectangleWidth + size, y + rectangleHeight, Colors.Yellow); writBmp.FillRectangle(x, y + rectangleHeight, x + rectangleWidth + size, y + rectangleHeight + size, Colors.Yellow); break; } case ''6'': { writBmp.FillRectangle(x, y, x + rectangleWidth, y + size, Colors.Yellow); writBmp.FillRectangle(x, y, x + size, y + rectangleHeight, Colors.Yellow); writBmp.FillRectangle(x, y + (rectangleHeight / 2), x + rectangleWidth, y + (rectangleHeight / 2) + size, Colors.Yellow); writBmp.FillRectangle(x + rectangleWidth, y + (rectangleHeight / 2), x + rectangleWidth + size, y + rectangleHeight, Colors.Yellow); writBmp.FillRectangle(x, y + rectangleHeight, x + rectangleWidth, y + rectangleHeight + size, Colors.Yellow); break; } case ''7'': { writBmp.FillRectangle(x, y, x + rectangleWidth, y + size, Colors.Yellow); writBmp.FillRectangle(x + rectangleWidth, y, x + rectangleWidth + size, y + rectangleHeight + size, Colors.Yellow); writBmp.FillRectangle(x + (rectangleWidth / 2), y + (rectangleHeight / 2), x + rectangleWidth, y + (rectangleHeight / 2) + size, Colors.Yellow); break; } case ''8'': { writBmp.FillRectangle(x, y, x + rectangleWidth, y + size, Colors.Yellow); writBmp.FillRectangle(x, y, x + size, y + (rectangleHeight / 2), Colors.Yellow); writBmp.FillRectangle(x + rectangleWidth, y, x + rectangleWidth + size, y + (rectangleHeight / 2), Colors.Yellow); writBmp.FillRectangle(x, y + (rectangleHeight / 2), x + rectangleWidth, y + (rectangleHeight / 2) + size, Colors.Yellow); writBmp.FillRectangle(x, y + (rectangleHeight / 2), x + size, y + rectangleHeight, Colors.Yellow); writBmp.FillRectangle(x + rectangleWidth, y + (rectangleHeight / 2), x + rectangleWidth + size, y + rectangleHeight, Colors.Yellow); writBmp.FillRectangle(x, y + rectangleHeight, x + rectangleWidth, y + rectangleHeight + size, Colors.Yellow); break; } case ''9'': { writBmp.FillRectangle(x, y, x + rectangleWidth, y + size, Colors.Yellow); writBmp.FillRectangle(x, y, x + size, y + (rectangleHeight / 2), Colors.Yellow); writBmp.FillRectangle(x + rectangleWidth, y, x + rectangleWidth + size, y + rectangleHeight + size, Colors.Yellow); writBmp.FillRectangle(x, y + (rectangleHeight / 2), x + rectangleWidth, y + (rectangleHeight / 2) + size, Colors.Yellow); break; } case ''/'': { writBmp.DrawLine(x + (rectangleWidth / 2), y + rectangleHeight, x + rectangleWidth, y, Colors.Yellow); var increment = (rectangleWidth / 10); writBmp.DrawLine(x + (rectangleWidth / 2) + increment, y + rectangleHeight, x + rectangleWidth + increment, y, Colors.Yellow); increment += increment; writBmp.DrawLine(x + (rectangleWidth / 2) + increment, y + rectangleHeight, x + rectangleWidth + increment, y, Colors.Yellow); break; } } x += (rectangleWidth + whiteSpaceSize); } }