0
일부 XAML UserControl을 PNG로 변환하는 앱이 있습니다. 현재까지는 잘 작동했지만 불행히도 이제는 이미지의 크기를 두 배로 늘려야합니다.WPNG를 PNG로 렌더링 할 때 TransformGroup을 FramworkElement에 추가하십시오.
내 방법 (즉, 작동하지 않습니다!) 내가로드 한 후
이 줄은 SaveUsingEncoder 방법의 상단에 새로운 라인 ... 시각적 요소에 ScaleTransform을 추가했다.
visual.RenderTransform = GetScaleTransform (2);
PNG는 새로운 크기 (3000 x 2000)이지만 XAML은 이미지 가운데에 1500x1000으로 렌더링됩니다.
아무도 도와 줄 수 있습니까? RenderTargetBitmap에
렌더링하기 전에 visual.UpdateLayout 호출
private void Load(string filename)
{
var stream = new FileStream(filename), FileMode.Open);
var frameworkElement = (FrameworkElement)(XamlReader.Load(stream));
var scale = 2;
var encoder = new PngBitmapEncoder();
var availableSize = new Size(1500 * scale, 1000 * scale);
frameworkElement.Measure(availableSize);
frameworkElement.Arrange(new Rect(availableSize));
name = name.Replace(" ", "-");
SaveUsingEncoder(frameworkElement, string.Format(@"{0}.png", name), encoder, availableSize);
}
private TransformGroup GetScaleTransform(int scale)
{
var myScaleTransform = new ScaleTransform {ScaleY = scale, ScaleX = scale};
var myTransformGroup = new TransformGroup();
myTransformGroup.Children.Add(myScaleTransform);
return myTransformGroup;
}
private void SaveUsingEncoder(FrameworkElement visual, string fileName, BitmapEncoder encoder, Size size)
{
visual.RenderTransform = GetScaleTransform(2);
var bitmap = new RenderTargetBitmap(
(int) size.Width,
(int) size.Height,
96,
96,
PixelFormats.Pbgra32);
bitmap.Render(visual);
var frame = BitmapFrame.Create(bitmap);
encoder.Frames.Add(frame);
using (var stream = File.Create(fileName))
{
encoder.Save(stream);
}
}
[에 UpdateLayout] (http://msdn.microsoft.com/en-us/library/system.windows.uielement.updatelayout.aspx) RenderTargetBitmap 렌더링하기 전에? – Clemens
그게, 환호! –