Сообщение [WPF] RenderOptions игнорируется от 19.12.2016 10:20
Изменено 10.01.2017 5:55 AndrewVK
[WPF] RenderOptions игнорируется
Привет всем!
Захотел сделать картинку контрола, в котором фон представляет RadialGradientBrush. После сохранении в формате PNG увидел что переход как бы гладкий, но в тоже время видны ступени.
Подумал все дело в RenderOptions, но он не работает!!! ставлю BitmapScalingMode.NearestNeighbor, а получаю такое же кривое сглаживание, хотя ожидалось что сглаживания вообще не будет!!!
Захотел сделать картинку контрола, в котором фон представляет 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);
}
}
[WPF] RenderOptions игнорируется
Привет всем!
Захотел сделать картинку контрола, в котором фон представляет RadialGradientBrush. После сохранении в формате PNG увидел что переход как бы гладкий, но в тоже время видны ступени.
Подумал все дело в RenderOptions, но он не работает!!! ставлю BitmapScalingMode.NearestNeighbor, а получаю такое же кривое сглаживание, хотя ожидалось что сглаживания вообще не будет!!!
Захотел сделать картинку контрола, в котором фон представляет 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);
}
}