C # изображение кодировать производительность - PullRequest
0 голосов
/ 04 июля 2018

Я должен нарисовать для другого приложения несколько наложенных изображений. Мне нужно разрешение 1920х1080 с прозрачностью. Я проверил с system.drawing и измерил, что нужно 11ms только для одной PNG кодировки image.Save(memoryStream, ImageFormat.Png);

Я также проверял некоторые другие проекты SkiaSharp , ImageProcessor , SharpDX , но производительность хуже, чем system.drawing. Я также тестировал с компонентами WPF System.Windows.Media, но тоже хуже.

Я также нашел это сообщение в блоге 5 причин, по которым вам следует прекратить использование System.Drawing из ASP.NET

Может кто-нибудь помочь мне с тем, как я могу ускорить эту логику?

мой код

using (var image = new Bitmap(1920, 1080))
using (var canvas = Graphics.FromImage(image))
{
    //Some draw logic

    using (var memoryStream = new MemoryStream())
    {
        image.Save(memoryStream, ImageFormat.Png);
        return memoryStream.ToArray();
    }
}

Обновление 1

@ sLw я должен создать для каждого кадра видео оверлей настройки видео, продолжительность которого составляет 2 минуты. В этом случае мне нужно 3000 изображений для одного видео. Это нужно только 33 секунды для создания оверлеев.

@ mjwills Любое возможное улучшение ведет нас вперед

@ PepitoSh Я нашел только этот проект pngcs Я тестирую это в ближайшее время

Обновление 2

Я также протестировал WebP второй формат с поддержкой прозрачности. Но в этом формате мне нужно 21ms -> webp.EncodeLossless(image);

...