[WPF] RenderOptions игнорируется
От: SanyaVB  
Дата: 19.12.16 10:20
Оценка:
Привет всем!
Захотел сделать картинку контрола, в котором фон представляет RadialGradientBrush. После сохранении в формате PNG увидел что переход как бы гладкий, но в тоже время видны ступени.
Подумал все дело в RenderOptions, но он не работает!!! ставлю BitmapScalingMode.NearestNeighbor, а получаю такое же кривое сглаживание, хотя ожидалось что сглаживания вообще не будет!!!

<UserControl x:Class="WpfApplication2.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:local="clr-namespace:WpfApplication2"            
             Height="220" Width="420">
    <UserControl.Resources>        
        <RadialGradientBrush x:Key="radialBrush" Center="0.5 0.5" RadiusX="1" RadiusY="0.6" >
            <GradientStop Color="#FF4FB63F" Offset="0"/>
            <GradientStop Color="#FF429338" Offset="0.2"/>
            <GradientStop Color="#FF0C2B07" Offset="0.7"/>
            <GradientStop Color="#FF0C2B07" Offset="1"/>
        </RadialGradientBrush>
    </UserControl.Resources>
    <Grid Background="{StaticResource radialBrush}"/>
</UserControl>

        private void Save(string filename, int scale)
        {
            RenderTargetBitmap render = new RenderTargetBitmap(420 * scale, 220 * scale, 96 * scale, 96 * scale, PixelFormats.Pbgra32);
            render.Render(control);
            render.SetValue(RenderOptions.BitmapScalingModeProperty, BitmapScalingMode.NearestNeighbor);
            TransformedBitmap transform = new TransformedBitmap(render, new ScaleTransform(0.5, 0.5, 0, 0));
            transform.SetValue(RenderOptions.BitmapScalingModeProperty, BitmapScalingMode.NearestNeighbor);
            PngBitmapEncoder png = new PngBitmapEncoder();
            png.Frames.Add(BitmapFrame.Create(transform));
            
            using (FileStream stream = new FileStream(string.Format("{0}_{1}.png", filename, scale), FileMode.Create, FileAccess.Write, FileShare.Read))
            {
                png.Save(stream);
            }
        }
Отредактировано 10.01.2017 5:55 AndrewVK . Предыдущая версия .
wpf
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.