Я должен нарисовать для другого приложения несколько наложенных изображений. Мне нужно разрешение 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);