#c# #wpf #canvas #render
Вопрос:
Я создаю программу, в которой вы можете рисовать на холсте с помощью прямоугольников (дочерние элементы холста). Я хочу реализовать возможность экспорта изображения в формат png. Моя проблема в том, что я хочу, чтобы пользователь мог установить разрешение выходного изображения. Я попытался создать новый холст в коде c# нужного размера, и я просто добавляю все прямоугольники на этот холст. Когда я пытаюсь отрисовывать его, выходной файл имеет правильный размер, но изображение полностью черное (я установил черный фон холста). Моя теория заключается в том, что без отображения холста пользователю он не может отобразить все элементы изображения. Я также попытался изменить зиндекс прямоугольников, но ничего не получилось. Вот мой код для создания и визуализации холста:
public void RenderToPNG(int heightwidth, string destinationfilename){
Canvas RenderCanvas = new Canvas();
RenderCanvas.Height = heightwidth;
RenderCanvas.Width = heightwidth;
RenderCanvas.Background = Brushes.Black;
// Here code to copy all the elements to RenderCanvas
// Render Canvas
RenderTargetBitmap rtb = new RenderTargetBitmap(heightwidth, heightwidth, 96, 96,
PixelFormats.Default);
rtb.Render(RenderCanvas);
BitmapEncoder pngEncoder = new PngBitmapEncoder();
pngEncoder.Frames.Add(BitmapFrame.Create(rtb));
MemoryStream ms = new MemoryStream();
pngEncoder.Save(ms);
ms.Close();
File.WriteAllBytes(destinationfilename, ms.ToArray());
}
Есть ли способ отобразить холст вместе с его дочерними элементами, не отображая его в окне или что-то в этом роде?
Или есть лучший способ решить мою проблему, позволив пользователю регулировать разрешение выходного файла?
Любая помощь будет признательна! Я искал решение своей проблемы, но не мог найти ничего, что помогло бы.