Подскажите, какие существуют способы качественного масштабирования изображений с текстом.
Пробовал так:
using (System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(imageBitmap)) {
graphics.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
graphics.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
graphics.CompositingMode = System.Drawing.Drawing2D.CompositingMode.SourceCopy;
graphics.PixelOffsetMode = System.Drawing.Drawing2D.PixelOffsetMode.HighQuality;
graphics.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
graphics.DrawImage(imageBitmap, 0, 0, width, height);
}
ImgBox.Source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
imageBitmap.GetHbitmap(), IntPtr.Zero,
Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
Использовал Emgu CV:
Image<Bgr, Byte> captureImage = new Image<Bgr, byte>(imageBitmap);
Image<Bgr, byte> resizedImage = captureImage.Resize(width, height, Emgu.CV.CvEnum.Inter.Area);
ImgBox.Source = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap(
resizedImage.ToBitmap().GetHbitmap(),
IntPtr.Zero, Int32Rect.Empty, BitmapSizeOptions.FromEmptyOptions());
Выводил так:
<Image x:Name="ImgBox" Width=".." Height=".." SnapsToDevicePixels="True" RenderOptions.BitmapScalingMode="Fant"/>
Но результата это нужного не даёт :(
Текст, если он есть на картинках, по-прежнему размывается или сильно рябит.
Для примера как мне нужно, приведу алгоритм TeamViewer. Исходное изображение:
Результат масштабирования:
Добавлю ещё вот какую тему: что если я имею не Bitmap, а ID3D11Texture2D? Как тут качественно "смаштабировать" без преобразований в другие типы (например, в тот же Bitmap)?
Сборка персонального компьютера от Artline: умный выбор для современных пользователей