{"id":1696,"date":"2012-04-21T11:42:54","date_gmt":"2012-04-21T10:42:54","guid":{"rendered":"https:\/\/www.scichart.com\/2012\/04\/21\/extending-scichart-with-text-annotations-and-screenshots\/"},"modified":"2022-12-09T13:09:05","modified_gmt":"2022-12-09T13:09:05","slug":"extending-scichart-with-text-annotations-and-screenshots","status":"publish","type":"post","link":"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/","title":{"rendered":"Extending SciChart with Text Annotations and Screenshots"},"content":{"rendered":"

Providing Annotations via The ChartModifier API<\/h3>\n

This article hails from the days of v1.3.x where Annotations were not native to SciChart. We’re keeping it for posterities sake, however, SciChart now has a much improved Annotations API in v1.5 of SciChart<\/a> and Screenshots \/ Printing API<\/a>. So do take this article as a bit of history and use the new Annotations API instead!<\/p><\/blockquote>\n

One of the more hotly requested features of SciChart is the ability to add custom Annotations. While this feature is currently in Beta and the API will be improved for subsequent versions of SciChart, this is already possible with the current release. This article shows you how to do just that with the current released version of SciChart (v1.2.1).<\/p>\n

SciChart ships with a ChartModifier API, which allows you, the end-user to extend interactivity of the chart as you see fit. The ChartModifier API allows you to subscribe to mouse events, render update events, overlay UIElements on the chart, interact with chart Axes and convert data values to pixel coordinates and back. With these building blocks you can do almost anything that WPF and Silverlight allow.<\/p>\n

The Use-Case<\/h3>\n

User X wants to analyse some data. They want to display a large dataset (>10k points) and interact with the chart by pointing and clicking. In particular they want to highlight areas of interest with text\/lines as if the chart were being edited in a paint program. Finally, they want to export the annotated chart to an image file to include in reports.<\/p>\n

Ok you say, so where shall we start? We start by creating a chart with some data to render.<\/p>\n

Xaml<\/h4>\n
<SciChart:SciChartSurface x:Name=\"sciChart\" Margin=\"10\">\r\n\r\n    <SciChart:SciChartSurface.RenderableSeries>\r\n        <SciChart:FastLineRenderableSeries SeriesColor=\"SteelBlue\" ResamplingMode=\"None\"\/>\r\n    <\/SciChart:SciChartSurface.RenderableSeries>\r\n\r\n    <SciChart:SciChartSurface.XAxis>\r\n        <SciChart:NumericAxis TextFormatting=\"0.000E+0\"\/>\r\n    <\/SciChart:SciChartSurface.XAxis>\r\n\r\n    <SciChart:SciChartSurface.YAxis>\r\n        <SciChart:NumericAxis\/>\r\n    <\/SciChart:SciChartSurface.YAxis>\r\n\r\n    <SciChart:SciChartSurface.ChartModifier>\r\n        <SciChart:ModifierGroup>\r\n            <SciChart:RubberBandXyZoomModifier x:Name=\"zoomModifier\" IsXAxisOnly=\"True\" IsEnabled=\"True\"\/>\r\n            <SciChart:ZoomPanModifier x:Name=\"panModifier\" IsEnabled=\"False\"\/>\r\n            <SciChart:XAxisDragModifier\/>\r\n            <SciChart:YAxisDragModifier\/>\r\n        <\/SciChart:ModifierGroup>\r\n    <\/SciChart:SciChartSurface.ChartModifier>\r\n<\/SciChart:SciChartSurface>\r\n<\/pre>\n

Code<\/h4>\n
private void PopulateChart()\r\n{\r\n\/\/ This example assumes our data has been populated in arrays\r\ndouble[] yValues;\r\ndouble[] xValues;\r\n\r\n\/\/ Suspend drawing\r\nusing (var updateSuspender = sciChart.SuspendUpdates())\r\n{\r\n\/\/ Create dataset\r\nvar dataSeriesSet = new DataSeriesSet();\r\nsciChart.DataSet = dataSeriesSet;\r\n\r\n\/\/ Add series\r\nvar tdSeries = dataSeriesSet.AddSeries();\r\ntdSeries.SeriesName = &quot;Time Domain&quot;;\r\n\r\n\/\/ Append data\r\ntdSeries.Append(xValues, yValues);\r\n\r\n\/\/ On every zoom extents, the Y Range will expand by 10% below and 10% above the data range\r\nsciChart.YAxis.GrowBy = new DoubleRange(0.1, 0.1);\r\n\r\n\/\/ Zoom extents\r\nsciChart.ZoomExtents();\r\n}\r\n\/\/ redraws on exit of this block (disposal of ISuspendable type)\r\n}\r\n<\/pre>\n

The above code creates a SciChartSurface instance with Numeric X and Y Axes. It creates a single line series and adds a dataset with single DataSeries. The DataSeries is populated with double values. Notice that the SciChartSurface.ChartModifier property is filled with a ModifierGroup containing multiple chart modifiers. These provide our zooming, panning and axis dragging behavior.<\/p>\n

    <!-- ... -->\r\n    <SciChart:SciChartSurface.ChartModifier>\r\n        <SciChart:ModifierGroup>\r\n    <WpfApplication1:TextAnnotationModifier x:Name=\"annotationModifier\"\/>\r\n            <SciChart:RubberBandXyZoomModifier x:Name=\"zoomModifier\" IsXAxisOnly=\"True\" IsEnabled=\"True\"\/>\r\n            <SciChart:ZoomPanModifier x:Name=\"panModifier\" IsEnabled=\"False\"\/>\r\n            <SciChart:XAxisDragModifier\/>\r\n            <SciChart:YAxisDragModifier\/>\r\n        <\/SciChart:ModifierGroup>\r\n    <\/SciChart:SciChartSurface.ChartModifier>\r\n<\/pre>\n

What we will do in the next section is create a custom modifier to add our annotations.<\/p>\n

Creating the custom AnnotationModifier<\/h3>\n

First of all, we need to create a base class for our annotations. This will be AnnotationControl and simply inherits FrameworkElement. Later we will override OnRender to perform the drawing, but for now leave this class as-is. AnnotationControl stores the X,Y data values (not mouse coordinates) where we wish to draw our annotation. These will be used to update the annotation position as the chart is zoomed, panned or otherwise redrawn.<\/p>\n

public class AnnotationControl : FrameworkElement\r\n{\r\npublic double XData1 { get; set; }\r\npublic double XData2 { get; set; }\r\npublic double YData1 { get; set; }\r\npublic double YData2 { get; set; }\r\npublic string Text { get; set; }\r\n}\r\n<\/pre>\n

Next we need to create a custom chart modifier to draw our annotations. This will be called AnnotationsModifier and extends ChartModifierBase.<\/p>\n

public class AnnotationsModifier : ChartModifierBase\r\n{\r\nprivate readonly IList _annotations = new List();\r\n\r\n\/\/ Occurs when the modifier is attached to the parent surface\r\npublic override void OnAttached()\r\n{\r\nbase.OnAttached();\r\nServices.GetService().Subscribe(OnScichartSurfaceRendered);\r\n}\r\n\r\npublic override void OnModifierDoubleClick(ModifierMouseArgs e)\r\n{\r\nbase.OnModifierDoubleClick(e);\r\nAddAnnotation(e.MousePoint);\r\n}\r\n\r\n\/\/ Called each time the SciChartSurface is rendered\r\nprivate void OnScichartSurfaceRendered(SciChartRenderedMessage obj)\r\n{\r\nUpdateAnnotations();\r\n}\r\n\r\nprivate void UpdateAnnotations()\r\n{\r\nforeach(var annotation in _annotations)\r\n{\r\ndouble xCoord1 = XAxis.GetCoordinate(annotation.XData1);\r\ndouble yCoord1 = YAxis.GetCoordinate(annotation.YData1);\r\n\r\nCanvas.SetLeft(annotation, xCoord1);\r\nCanvas.SetTop(annotation, yCoord1);\r\n\r\nannotation.InvalidateVisual();\r\n}\r\n}\r\n\r\nprivate void AddAnnotation(Point mousePoint)\r\n{\r\nvar annotation = new AnnotationControl();\r\n\r\nannotation.XData1 = (double)XAxis.HitTest(mousePoint).DataValue;\r\nannotation.YData1 = (double)YAxis.HitTest(mousePoint).DataValue;\r\n\r\nannotation.Text = &quot;Hello World!&quot;;\r\n\r\n_annotations.Add(annotation);\r\nModifierSurface.Children.Add(annotation);\r\nUpdateAnnotations();\r\n}\r\n}\r\n<\/pre>\n

AnnotationsModifier<\/em> overrides the OnAttached()<\/em> method, called whenever a Chart Modifier is attached to a parent SciChartSurface<\/em>. Here it subscribes to the SciChartRendered event, which is fired immediately before the end of a render pass. Events are weak events provided by TinyMessenger<\/a>, meaning they don’t need to be unsubscribed to prevent memory leaks.<\/p>\n

AnnotationsModifier<\/em> also overrides OnModifierMouseDoubleClick<\/em>. This provides a cross-platform mouse double click event which hooks into the SciChart eventing system. Here we will create an annotation.<\/p>\n

The next two methods of interest are AddAnnotation()<\/em> and UpdateAnnotations()<\/em>.<\/p>\n

AddAnnotation()<\/em> creates an AnnotationControl<\/em> and adds it to the ModifierSurface<\/em>. This is a canvas which is overlaid on top of the chart pane and allows UIElements<\/em> to be added and manipulated. Notice that AddAnnotation()<\/em> first converts the X,Y mouse coordinates into X,Y data coordinates for storage on the AnnotationControl<\/em>.<\/p>\n

\/\/ ...\r\nprivate void AddAnnotation(Point mousePoint)\r\n{\r\nvar annotation = new AnnotationControl();\r\n\r\n\/\/ Convert X,Y mouse points to data coordinates and store\r\nannotation.XData1 = (double)XAxis.HitTest(mousePoint).DataValue;\r\nannotation.YData1 = (double)YAxis.HitTest(mousePoint).DataValue;\r\nannotation.Text = &quot;Hello World!&quot;;\r\n\r\n_annotations.Add(annotation);\r\nModifierSurface.Children.Add(annotation);\r\nUpdateAnnotations();\r\n}\r\n<\/pre>\n

UpdateAnnotations()<\/em> iterates over all AnnotationControls<\/em> currently on the chart ModifierSurface. These are repositioned by converting their previously stored X,Y data coordinates into X,Y pixel coordinates. UpdateAnnotations occurs every time the parent SciChartSurface is rendered or if a new annotation is added.<\/p>\n

\/\/ ...\r\nprivate void UpdateAnnotations()\r\n{\r\nforeach(var annotation in _annotations)\r\n{\r\n\/\/ Convert Data coordinates to X,Y pixel coords\r\ndouble xCoord1 = XAxis.GetCoordinate(annotation.XData1);\r\ndouble yCoord1 = YAxis.GetCoordinate(annotation.YData1);\r\n\r\nCanvas.SetLeft(annotation, xCoord1);\r\nCanvas.SetTop(annotation, yCoord1);\r\n\r\nannotation.InvalidateVisual();\r\n}\r\n}\r\n<\/pre>\n

Custom Rendering of our Annotation<\/h3>\n

Finally, we need to update our AnnotationControl to render some text. To do this we are going to override OnRender.<\/p>\n

Note that OnRender is a WPF only feature. If you wish to create annotations in Silverlight, this can be done, but you will need to generate the annotation control using simple UIElement derived classes, e.g. Line, Rectangle, TextBlock.<\/em><\/p><\/blockquote>\n

public class AnnotationControl : FrameworkElement\r\n{\r\nprivate Pen _linePen;\r\nprivate SolidColorBrush _textBrush;\r\nprivate Typeface _typeFace;\r\n\r\npublic TextAnnotationControl()\r\n{\r\n_textBrush = new SolidColorBrush(Colors.DarkSlateGray);\r\n_linePen = new Pen(_textBrush, 2);\r\n_typeFace = new Typeface(\r\nnew FontFamily(&quot;Arial&quot;),\r\nFontStyles.Normal,\r\nFontWeights.Normal,\r\nFontStretches.Normal);\r\n}\r\n\r\npublic double XData1 { get; set; }\r\npublic double XData2 { get; set; }\r\npublic double YData1 { get; set; }\r\npublic double YData2 { get; set; }\r\npublic string Text { get; set; }\r\n\r\nprotected override void OnRender(DrawingContext drawingContext)\r\n{\r\nbase.OnRender(drawingContext);\r\n\r\nvar formattedText = new FormattedText(Text,\r\nCultureInfo.InvariantCulture,\r\nFlowDirection.LeftToRight,\r\n_typeFace,\r\n10.0,\r\n_textBrush);\r\n\r\n\/\/ Annotation will be positioned by the parent AnnotationsModifier\r\n\/\/ Just draw the text at an offset of 0,0 (Note: can adjust offset\r\n\/\/ if required)\r\ndrawingContext.DrawText(formattedText, new Point(0,0));\r\n}\r\n}\r\n<\/pre>\n

The above code simply draws some text to the screen at an offset of 0,0. If you wish to modify this offset, for intance to account for the height or alignment of the text string, then do so here.<\/p>\n

Putting it all together<\/h3>\n
\"Custom<\/a>
Custom Annotations<\/figcaption><\/figure>\n

The above code snippets hopefully demonstrate how you can add custom annotations to your SciChart projects. To simplify this process we’ve created a Demo Application<\/a> which you can download and compile. This requires the SciChart binaries which you can get by signing up to our Newsletter<\/a>.<\/p>\n

The demo application includes a toolbar at the top of the chart to set zoom, pan mode and also allows you to take a screenshot. Screenshot functionality is provided by the enclosed ScreenshotUtil, which uses the WPF RenderTargetBitmap class to perform this action.<\/p>\n","protected":false},"excerpt":{"rendered":"

Providing Annotations via The ChartModifier API This article hails from the days of v1.3.x where Annotations were not native to […]<\/p>\n","protected":false},"author":1,"featured_media":1695,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[195,197,196,202],"tags":[],"acf":[],"yoast_head":"\nExtending SciChart with Text Annotations and Screenshots - SciChart<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Extending SciChart with Text Annotations and Screenshots - SciChart\" \/>\n<meta property=\"og:description\" content=\"Providing Annotations via The ChartModifier API This article hails from the days of v1.3.x where Annotations were not native to […]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/\" \/>\n<meta property=\"og:site_name\" content=\"SciChart\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/scichart\" \/>\n<meta property=\"article:published_time\" content=\"2012-04-21T10:42:54+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-12-09T13:09:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.scichart.com\/wp-content\/uploads\/2012\/04\/AnnotationsScreenshot.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"768\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"SciChart\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@scichart\" \/>\n<meta name=\"twitter:site\" content=\"@scichart\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"SciChart\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"NewsArticle\",\"@id\":\"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/\"},\"author\":{\"name\":\"SciChart\",\"@id\":\"https:\/\/www.scichart.com\/#\/schema\/person\/8cfb5a5b26642ef0802cd582a84e78f6\"},\"headline\":\"Extending SciChart with Text Annotations and Screenshots\",\"datePublished\":\"2012-04-21T10:42:54+00:00\",\"dateModified\":\"2022-12-09T13:09:05+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/\"},\"wordCount\":838,\"publisher\":{\"@id\":\"https:\/\/www.scichart.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.scichart.com\/wp-content\/uploads\/2012\/04\/AnnotationsScreenshot.jpg\",\"articleSection\":[\"Basics\",\"Intermediate\",\"Tutorials\",\"WPF\"],\"inLanguage\":\"en-GB\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/\",\"url\":\"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/\",\"name\":\"Extending SciChart with Text Annotations and Screenshots - SciChart\",\"isPartOf\":{\"@id\":\"https:\/\/www.scichart.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.scichart.com\/wp-content\/uploads\/2012\/04\/AnnotationsScreenshot.jpg\",\"datePublished\":\"2012-04-21T10:42:54+00:00\",\"dateModified\":\"2022-12-09T13:09:05+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/#primaryimage\",\"url\":\"https:\/\/www.scichart.com\/wp-content\/uploads\/2012\/04\/AnnotationsScreenshot.jpg\",\"contentUrl\":\"https:\/\/www.scichart.com\/wp-content\/uploads\/2012\/04\/AnnotationsScreenshot.jpg\",\"width\":1024,\"height\":768},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.scichart.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Extending SciChart with Text Annotations and Screenshots\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.scichart.com\/#website\",\"url\":\"https:\/\/www.scichart.com\/\",\"name\":\"SciChart\",\"description\":\"WPF Charts, iOS Charts, Android Charts, JavaScript Chart\",\"publisher\":{\"@id\":\"https:\/\/www.scichart.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.scichart.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.scichart.com\/#organization\",\"name\":\"SciChart\",\"url\":\"https:\/\/www.scichart.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.scichart.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.scichart.com\/wp-content\/uploads\/2022\/11\/scichart-logo-1.png\",\"contentUrl\":\"https:\/\/www.scichart.com\/wp-content\/uploads\/2022\/11\/scichart-logo-1.png\",\"width\":312,\"height\":69,\"caption\":\"SciChart\"},\"image\":{\"@id\":\"https:\/\/www.scichart.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/scichart\",\"https:\/\/x.com\/scichart\",\"https:\/\/www.youtube.com\/scichart\",\"https:\/\/www.linkedin.com\/company\/scichart\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.scichart.com\/#\/schema\/person\/8cfb5a5b26642ef0802cd582a84e78f6\",\"name\":\"SciChart\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/www.scichart.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/a761d602cee83bf026ab79c8cb96a64b?s=96&d=https%3A%2F%2Fwww.scichart.com%2Fwp-content%2Fuploads%2F2022%2F12%2Fdefault-avatar.jpg&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/a761d602cee83bf026ab79c8cb96a64b?s=96&d=https%3A%2F%2Fwww.scichart.com%2Fwp-content%2Fuploads%2F2022%2F12%2Fdefault-avatar.jpg&r=g\",\"caption\":\"SciChart\"},\"url\":\"https:\/\/www.scichart.com\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Extending SciChart with Text Annotations and Screenshots - SciChart","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/","og_locale":"en_GB","og_type":"article","og_title":"Extending SciChart with Text Annotations and Screenshots - SciChart","og_description":"Providing Annotations via The ChartModifier API This article hails from the days of v1.3.x where Annotations were not native to […]","og_url":"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/","og_site_name":"SciChart","article_publisher":"https:\/\/www.facebook.com\/scichart","article_published_time":"2012-04-21T10:42:54+00:00","article_modified_time":"2022-12-09T13:09:05+00:00","og_image":[{"width":1024,"height":768,"url":"https:\/\/www.scichart.com\/wp-content\/uploads\/2012\/04\/AnnotationsScreenshot.jpg","type":"image\/jpeg"}],"author":"SciChart","twitter_card":"summary_large_image","twitter_creator":"@scichart","twitter_site":"@scichart","twitter_misc":{"Written by":"SciChart","Estimated reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"NewsArticle","@id":"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/#article","isPartOf":{"@id":"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/"},"author":{"name":"SciChart","@id":"https:\/\/www.scichart.com\/#\/schema\/person\/8cfb5a5b26642ef0802cd582a84e78f6"},"headline":"Extending SciChart with Text Annotations and Screenshots","datePublished":"2012-04-21T10:42:54+00:00","dateModified":"2022-12-09T13:09:05+00:00","mainEntityOfPage":{"@id":"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/"},"wordCount":838,"publisher":{"@id":"https:\/\/www.scichart.com\/#organization"},"image":{"@id":"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/#primaryimage"},"thumbnailUrl":"https:\/\/www.scichart.com\/wp-content\/uploads\/2012\/04\/AnnotationsScreenshot.jpg","articleSection":["Basics","Intermediate","Tutorials","WPF"],"inLanguage":"en-GB"},{"@type":"WebPage","@id":"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/","url":"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/","name":"Extending SciChart with Text Annotations and Screenshots - SciChart","isPartOf":{"@id":"https:\/\/www.scichart.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/#primaryimage"},"image":{"@id":"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/#primaryimage"},"thumbnailUrl":"https:\/\/www.scichart.com\/wp-content\/uploads\/2012\/04\/AnnotationsScreenshot.jpg","datePublished":"2012-04-21T10:42:54+00:00","dateModified":"2022-12-09T13:09:05+00:00","breadcrumb":{"@id":"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/#primaryimage","url":"https:\/\/www.scichart.com\/wp-content\/uploads\/2012\/04\/AnnotationsScreenshot.jpg","contentUrl":"https:\/\/www.scichart.com\/wp-content\/uploads\/2012\/04\/AnnotationsScreenshot.jpg","width":1024,"height":768},{"@type":"BreadcrumbList","@id":"https:\/\/www.scichart.com\/extending-scichart-with-text-annotations-and-screenshots\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.scichart.com\/"},{"@type":"ListItem","position":2,"name":"Extending SciChart with Text Annotations and Screenshots"}]},{"@type":"WebSite","@id":"https:\/\/www.scichart.com\/#website","url":"https:\/\/www.scichart.com\/","name":"SciChart","description":"WPF Charts, iOS Charts, Android Charts, JavaScript Chart","publisher":{"@id":"https:\/\/www.scichart.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.scichart.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-GB"},{"@type":"Organization","@id":"https:\/\/www.scichart.com\/#organization","name":"SciChart","url":"https:\/\/www.scichart.com\/","logo":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.scichart.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.scichart.com\/wp-content\/uploads\/2022\/11\/scichart-logo-1.png","contentUrl":"https:\/\/www.scichart.com\/wp-content\/uploads\/2022\/11\/scichart-logo-1.png","width":312,"height":69,"caption":"SciChart"},"image":{"@id":"https:\/\/www.scichart.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/scichart","https:\/\/x.com\/scichart","https:\/\/www.youtube.com\/scichart","https:\/\/www.linkedin.com\/company\/scichart"]},{"@type":"Person","@id":"https:\/\/www.scichart.com\/#\/schema\/person\/8cfb5a5b26642ef0802cd582a84e78f6","name":"SciChart","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/www.scichart.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/a761d602cee83bf026ab79c8cb96a64b?s=96&d=https%3A%2F%2Fwww.scichart.com%2Fwp-content%2Fuploads%2F2022%2F12%2Fdefault-avatar.jpg&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/a761d602cee83bf026ab79c8cb96a64b?s=96&d=https%3A%2F%2Fwww.scichart.com%2Fwp-content%2Fuploads%2F2022%2F12%2Fdefault-avatar.jpg&r=g","caption":"SciChart"},"url":"https:\/\/www.scichart.com\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.scichart.com\/wp-json\/wp\/v2\/posts\/1696"}],"collection":[{"href":"https:\/\/www.scichart.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.scichart.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.scichart.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.scichart.com\/wp-json\/wp\/v2\/comments?post=1696"}],"version-history":[{"count":0,"href":"https:\/\/www.scichart.com\/wp-json\/wp\/v2\/posts\/1696\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.scichart.com\/wp-json\/wp\/v2\/media\/1695"}],"wp:attachment":[{"href":"https:\/\/www.scichart.com\/wp-json\/wp\/v2\/media?parent=1696"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.scichart.com\/wp-json\/wp\/v2\/categories?post=1696"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.scichart.com\/wp-json\/wp\/v2\/tags?post=1696"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}