Создание изображений в WPF без XAML и отображение - PullRequest
0 голосов
/ 07 сентября 2010

Я пытаюсь создать диаграмму WPF в коде c # и сохранить ее в файл, не отображая на экране. Это будет в службе WCF, где данные отправляются в службу, создается изображение и возвращается путь к изображению.

Пока у меня есть изображение для сохранения в файл, и отображаются данные по оси X & Y, но столбцы на графике не отображаются.

Кто-нибудь знает, почему столбцы на диаграмме не рисуются ... вот мой код:

public void DoWork () { var newThread = new Thread (CreateImage); newThread.SetApartmentState (ApartmentState.STA); newThread.Start (); }

    public void CreateImage()
    {
        var grid = new Grid {Width = 800, Height = 600, Background = new SolidColorBrush(Colors.LightBlue)};
        var chart = new Chart();
        grid.Children.Add(chart);

        var renderTarget = new RenderTargetBitmap((int)grid.Width, (int)grid.Height, 96d, 96d, PixelFormats.Default);


        var barSeries = new BarSeries
                            {
                                Title = "Fruit in Cupboard",
                                ItemsSource = new[]
                                                  {
                                                      new KeyValuePair<string, int>("Oranges", 18),
                                                      new KeyValuePair<string, int>("Apples", 15),
                                                      new KeyValuePair<string, int>("Melons", 2),
                                                      new KeyValuePair<string, int>("Pineapples", 4),
                                                      new KeyValuePair<string, int>("Plums", 25)
                                                  },
                                IndependentValueBinding = new Binding("Key"),
                                DependentValueBinding = new Binding("Value")
                            };

        chart.Series.Add(barSeries);

        grid.Measure(new Size(grid.Width, grid.Height));
        grid.Arrange(new Rect(new Size(grid.Width, grid.Height)));
        grid.UpdateLayout();

        renderTarget.Render(grid);

        var png = new PngBitmapEncoder();
        png.Frames.Add(BitmapFrame.Create(renderTarget));
        using (Stream stm = File.Create(string.Format(@"C:/Images/{0}.png", Guid.NewGuid())))
        {
            png.Save(stm);
        }
    }

1 Ответ

0 голосов
/ 27 июля 2011

У меня была именно эта проблема с RadChart Telerik.Объяснение было таким, как вы написали в своем комментарии выше - серия анимировалась, и снимок делался до того, как они стали видны.

Мое решение состояло в том, чтобы установить значение свойства ChartArea.EnableAnimations в false передрендеринг это.Я не знаком с таблицей WPF Toolkit Chart, но вполне возможно, что есть аналогичный параметр, который можно использовать для отключения анимации.

Обратите внимание, что есть еще одна связанная проблема с Telerik BarSeries - она ​​необходимачтобы установить непрозрачность полос на 1. Подробнее см. документацию Telerik .

...