Экспорт диаграммы без меток скрытых серий в легенде

Да, используйте классы WPF System.Windows.Media. Будучи полностью управляемыми, они не страдают от тех же проблем, что и материал GDI.

Вот выдержка из некоторого кода MVC, который я использую для визуализации градиентов, чтобы дать вам представление о том, как получить из WPF Visual в PNG:

using System;
using System.IO;
using System.Web.Mvc;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;

namespace MyMvcWebApp.Controllers
{
    public class ImageGenController : Controller
    {
        // GET: ~/ImageGen/Gradient?color1=red&color2=pink
        [OutputCache(CacheProfile = "Image")]
        public ActionResult Gradient(Color color1, Color color2, int width = 1, int height = 30, double angle = 90)
        {
            var visual = new DrawingVisual();
            using (DrawingContext dc = visual.RenderOpen())
            {
                Brush brush = new LinearGradientBrush(color1, color2, angle);
                dc.DrawRectangle(brush, null, new Rect(0, 0, width, height));
            }

            return new FileStreamResult(renderPng(visual, width, height), "image/png");
        }

        static Stream renderPng(Visual visual, int width, int height)
        {
            var rtb = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Default);
            rtb.Render(visual);

            var frame = BitmapFrame.Create(rtb);
            var encoder = new PngBitmapEncoder();
            encoder.Frames.Add(frame);

            var stream = new MemoryStream();
            encoder.Save(stream);
            stream.Position = 0;

            return stream;
        }
    }
}
0
задан Quentin Herzig 17 January 2019 в 16:57
поделиться

1 ответ

Это поведение не поддерживается в Highharts по умолчанию, но вы можете легко обернуть метод init, а для экспорта установите опцию showInLegend, основываясь на видимости серии:

Highcharts.wrap(Highcharts.Chart.prototype, 'init', function(proceed, options, callback) {
    if (options.chart && options.chart.forExport && options.series) {
        $.each(options.series, function() {
            if (this.visible === false) {
                this.showInLegend = false;
            }
        });
    }

    return proceed.call(this, options, callback);
});

Демонстрация в реальном времени: [ 113] http://jsfiddle.net/BlackLabel/x2gy7f0q/

Документы: https://www.highcharts.com/docs/extending-highcharts/extending-highcharts

0
ответ дан ppotaczek 17 January 2019 в 16:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: