У меня есть изображение JPG, доступное как байт [] в памяти.
Мне нужно создать CanvasBitmap для рисования этого изображения, которое в конечном итоге создает CompositionDrawingSurface, который я могу назначить своему SpriteVisual. И мне нужен сверхбыстрый метод, чтобы сделать это !!
Я успешно выполнил задачу, используя CanvasBitmap.LoadAsync(ICanvasResourceCreator, IRandomAccessStream)
, но этот подход занимает слишком много времени (более 10 миллисекунд), а при использовании CanvasBitmap.CreateFromBytes(ICanvasResourceCreator, byte[], int, int, DirectXPixelFormat)
это просто занимает 1 миллисекунду, что соответствует моим требованиям к производительности.
К сожалению, при использовании CanvasBitmap.CreateFromBytes
результатом будет не правильное изображение, а скорее облако точек, что заставляет меня думать, что существует проблема в кодировании / декодировании изображения.
Вот код, который я пробовал:
byte[] imgBytes = await ReadBinaryFile(path); // read the binary content of a JPG image, for the example purpose (in the real environment, the byte[] comes from in memory caches...)
using (CanvasBitmap canvasBitmap = CanvasBitmap.CreateFromBytes(s_canvasDevice, imgBytes, 600, 800, DirectXPixelFormat.B8G8R8A8UIntNormalized))
{
// Draw the image to the surface
using (CanvasDrawingSession session = CanvasComposition.CreateDrawingSession(surface))
{
session.Clear(Color.FromArgb(0, 0, 0, 0));
session.DrawImage(canvasBitmap, new Rect(0, 0, 600, 800), new Rect(0, 0, 600, 800));
}
}
Что мне не хватает?
Как я могу обработать byte[] imgBytes
, чтобы он мог быть полезен как ввод CanvasBitmap.CreateFromBytes
?
Спасибо!