SharePoint Charts v1.0.5-1 GA Released!

somnath

Hi,

Visifire for SharePoint now supports Drilldown. This  functionality allows you to get more detailed data when a DataPoint is clicked in the Chart.  For more info please  check out the documentation here.

You can download Visifire for SharePoint 1.0.5-1 GA here.

Cheers,
Team Visifire


Fast Silverlight Charts

Chirag

Hi,

You know that we are working on optimizing the performance of charts. I am happy to share that we are done optimizing the overall performance of the charts – QuickLine chart to start with. Both initial render (drawing chart for the first time) & real-time render (updating chart in real-time) are now blazing fast. With these changes, Visifire is one of the fastest Silverlight charts! This blog contains benchmark figures & samples to corroborate our claim.

You’d feel the need of faster charts only when there is high number of datapoints. For less datapoints any charting component would suffice. Time taken by a component to plot datapoints on a chart for the first time (initial render) is a key metric to decide the performance. We did a small exercise to calculate the number of datapoints a charting component could draw in one second. For comparison we are using Visiblox, a fairly quick chart from Scott Logic. We supplied 10,000 through 50,000 datapoints to both charting components. We repeated the exercise to get 10 sample figures. Later, took an average to find out the number of datapoints that could be drawn in a second. Visifire could draw anywhere between 14,500 to 13,200 datapoints in a second. Whereas Visiblox could draw a maximum of 6,800 datapoints & the performance degraded drastically as the datapoints increased. Below are the benchmark figures:

Visifire, Visiblox - Charting Performance Comparison

Note: More the datapoints per second, faster the chart.

Embedded below is the application used to calculate the benchmark figures. You can play around with it & decide who is fast!

Get Microsoft Silverlight

Get Microsoft Silverlight

Note: Lesser the time taken, faster the chart.

Measuring framerate is a good way of finding the real-time rendering performance of a chart. We have just borrowed some samples from Visiblox post. You can play around with the following sample & decide who is fast!

Get Microsoft Silverlight

Get Microsoft Silverlight

Note: More the frames per second, faster the chart.

The source code of the above samples is available in these archives [sample1, sample2] for you to verify. The samples don’t contain charting libraries & are to be downloaded separately. Feel free to comment on this exercise.

Cheers,
Chirag
Team Visifire
Fire up your imagination!


Windows Phone 7 Mango Ready Charts & Gauges

admin

Microsoft has announced that the forthcoming version of its Windows Phone operating system, code-named Mango, has brought over 500 new features, most notably:

  • Search – location specific, visual voice music search.
  • Dynamic – more control over live tiles.
  • Social – social networking with Linked In and Twitter.
  • Web – better browsing with hardware acceleration and IE9.
  • Groups – group people together friends, colleagues, family.
  • Multitasking – switching between apps is now a breeze.

windows-phone-7-mango-image

Microsoft is accepting and certifying Mango apps through the App Hub, new and existing titles optimized for Mango features will begin publishing soon.

We are happy to inform that our Visifire controls are Mango compatible. This means your WP7 applications using Visifire can make use of new features like multitasking and hardware acceleration, with which they will not only work faster but also make the user experience better.


WP7 (Windows Phone 7) App for Visifire

Chirag

Hi,

We are delighted to release a WP7 App to showcase Visifire charts & gauges. As you already know Visifire supports WP7. This App is to let you quickly try how Visifire controls run on WP7. Click here to download the App. Embedded below is a video tour of the App.

We are excited about this App. Please give it a spin & let us know your feedback.

Cheers,
Team Visifire


Have your say and win iPad 2 3G!

Chirag

Update: The last date to submit videos has been extended to 31st of July. We received requests for extension of contest date as many are on Summer vacation.

Hello,

You like Visifire & have been candid about it. Why not say it on camera or show a feature that you love? All you have to do is a short video on Visifire to win Apple iPad 2 3G! That’s not it. Next 5 best videos get complimentary developer licenses of Visifire worth $2,500.

Lately we gave away iPad to our MySQL Tools users. Checkout the featured videos here to know what makes a good video.

Embedded below is one of the iPad winning videos:

Now some simple guidelines. We’d like you to do either or both of the following:

  • You facing the camera & talking about Visifire (like testimonial)
  • You showing how you use Visifire in your application (like screencast)

Please try to comment on the specific features that you like in Visifire. Questionnaire below should help you get started:

  • What were your perceptions before you started using Visifire and were you reluctant in any way?
  • How did you feel as a result of using the Visifire?
  • What specific results did you get as a result of using the Visifire?

The video should be under 3 minutes. Upload the video to YouTube.com. Use the strings “Silverlight, WPF, WP7 Charts & Gauges” in the name, description & tags of the video. To enter the contest send a mail to info@visifire.com with the link to video, your full name, organization* & title*. Please send in your responses by 15th July 2011. Winners will be announced here in our blog.

*optional

Cheers,
Chirag
Team Visifire
US Sales: +1 (408) 600-0544 (Monday – Friday 8 am – 5 pm EST)
UK/EU Sales: +44 20-81-23-1250 (Monday – Friday 10 am – 5 pm GMT)

PS: By entering the contest you agree that you’ll maintain the video live & Visifire reserves the right to publish the video from its account in case the video goes offline.


Gesture support for Visifire WP7 (Windows Phone 7) Charts

Chirag

Hi,

We showcased the use of Visfire in WP7 (Windows Phone 7) way back a year ago. Since then we concentrated much on increasing the chart types & also introduced gauges. Now that the adoption of WP7 is increasing we are getting serious on WP7. This release contains gesture support for WP7. It supports gestures like pinch-zoom, panning and selection.

Embedded below is a short video showcasing gesture support in Visifire for WP7.

This release is just the beginning. Going forward, we are channelizing our energy to make the charting experience on WP7 even smoother & richer. Coming soon are:

  • Selection of a group of DataPoints
  • Tooltips on multi-touch
  • Controls optimized for resource constraint devices like phone
Give it a spin & let us know what you think. Download the latest release here.

Cheers,
Team Visifire


Why did we drop GPL for our Windows Phone 7 (WP7) charting controls?

Chirag
Hi,

We are proud of our controls. If you had ever thought of using charts in Silverlight or WPF you could have hardly missed us. We were open source & gave away controls for free. Later introduced a commercial license to support the development costs. There was hardly any difference between the free & commercial license. Our objective was just to support the development costs & continue giving away things back to the community. Of course, we reaped benefits of being open source. The product was tested by the large community. Enterprise users happily paid for using rock-solid product. We were doing good – hundreds of thousands of users & hundreds of customers.

And there came Windows Phone 7 (WP7). WP7 applications were to be written in Silverlight. We soon released WP7 charts. Everyone was happy. Soon started the GPL & WP7 Marketplace confusion. We started to feel the heat – our help desk was inundated with queries from users who were not sure if they could use Visifire in their applications. Lost several customers to “commercial only” competitors. One couldn’t have used Visifire in WP7 applications as it is GPLed. Microsoft has explicitly mentioned GPL in the excluded license. Refer: Section 1.l & 5.e of Windows Marketplace Application Provider Agreement. With Microsoft partnering with Nokia the space could only get bigger & better. We could no longer continue losing users & customers. We succumbed & dropped GPL!

Cheers,
Team Visifire


Silverlight/WPF Spline Chart

Chirag

Hi,

With this release Visifire introduces Spline Chart. A Spline Chart is similar to a Line Chart except that it draws a fitted curve through the data points. The spline interpolation and smoothing is for improved presentation of data. It allows one to take a limited set of known data points and approximate transitional values.

Demoed below is Messi’s path to glory!

Get Microsoft Silverlight

Cheers,
Team Visifire

http://www.visifire.com/blog/wp-content/post_xaps/GoalsScoredByMessiForBarcelonaClub.xap" height=" 680">Get Microsoft Silverlight


Silverlight/WPF Radar Chart

Chirag

Hi,

With this release Visifire introduces Radar Chart. A Radar Chart is a graphical method of displaying multivariate data in the form of a two-dimensional chart of three or more quantitative variables represented on axes starting from the same point. Radar Chart is also known as Web, Spider or Star Chart.

Shown below is the goals scored by top countries in FIFA World Cups 2006 & 2010 (till date).

Get Microsoft Silverlight

Cheers,
Team Visifire


Exporting Visifire Silverlight Chart as Image

Chirag

Exporting Silverlight charts to images has been the most coveted feature. In this tutorial, I am going to show you to export Visifire Silverlight chart as image from managed code. So before we start lets check out the live example below.

Get Microsoft Silverlight

Project Setup

Create a “Silverlight Application” project. Download the latest Visifire binaries from here. Extract the Zip file and add reference for the file named “SLVisifire.Charts.dll”. In this sample, I am going to use WriteableBitmap class in order to extract the pixel wise color information of the chart rendered inside Silverlight content. We will take help of JpegEncoder provided by a third party library called FJ.Core to encode the raster information to file stream.

Please download FJ.Core library from here and add the FJ.Core.dll as reference to the project.

Below are the steps that we are going to follow.

  1. Construct the Chart XAML inside MainPage.xaml.
  2. Exporting Chart as image.

Constructing Chart XAML

Open MainPage.xaml page, add a Chart and a button inside it as shown below:

<UserControl x:Class="SLSave2Image.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:vc="clr-namespace:Visifire.Charts;assembly=SLVisifire.Charts"
    mc:Ignorable="d" Width="500" Height="480">
    <Grid x:Name="LayoutRoot">
        <StackPanel>
            <vc:Chart Name="MyChart" Width="500" Height="300" Theme="Theme1">

                <vc:Chart.Titles>
                    <vc:Title Text="Visifire Chart"/>
                </vc:Chart.Titles>

                <vc:Chart.Series>
                    <vc:DataSeries RenderAs="Column" LabelEnabled="True">
                        <vc:DataSeries.DataPoints>
                            <vc:DataPoint AxisXLabel="Jan" YValue="35"/>
                            <vc:DataPoint AxisXLabel="Feb" YValue="32"/>
                            <vc:DataPoint AxisXLabel="Mar" YValue="27"/>
                            <vc:DataPoint AxisXLabel="Apr" YValue="17"/>
                            <vc:DataPoint AxisXLabel="May" YValue="16"/>
                        </vc:DataSeries.DataPoints>
                    </vc:DataSeries>
                </vc:Chart.Series>
            </vc:Chart>
            <Button Name="ButtonSave" Height="25" Width="160" Content="Save Chart" ></Button>
        </StackPanel>
    </Grid>
</UserControl>

Exporting Chart as image

Now open MainPage.xaml.cs page and add the following namespaces.

using FluxJpeg.Core;
using FluxJpeg.Core.Encoder;
using System.Windows.Media.Imaging;
using System.IO;
using Visifire.Charts;

Now attach an event handler for Click event of Button inside the Page constructor.

public MainPage()
{
    InitializeComponent();

    ButtonSave.Click += new RoutedEventHandler(ButtonSave_Click);
}

void ButtonSave_Click(object sender, RoutedEventArgs e)
{
    SaveToImage(MyChart);
}

Inside the ButtonSave event handler declare a function called SaveToImage() which will accept Chart as parameter as shown above.

Now inside the function definition, create a WriteableBitmap out of a Chart and collect the raster information from it. Then encode the raster information to file stream using JpegEncoder present in FJ.Core library as shown below. Finally save the file stream as image into hard drive.

/// <summary>
/// Save Visifire chart as Image
/// </summary>
/// <param name="Chart">Visifire.Charts.Chart</param>
private void SaveToImage(Chart chart)
{
    try
    {
        WriteableBitmap bitmap = new WriteableBitmap(chart, null);

        if (bitmap != null)
        {
            SaveFileDialog saveDlg = new SaveFileDialog();
            saveDlg.Filter = "JPEG Files (*.jpeg)|*.jpeg";
            saveDlg.DefaultExt = ".jpeg";

            if ((bool)saveDlg.ShowDialog())
            {
                using (Stream fs = saveDlg.OpenFile())
                {
                    MemoryStream stream = GetImageStream(bitmap);

                    //Get Bytes from memory stream and write into IO stream
                    byte[] binaryData = new Byte[stream.Length];
                    long bytesRead = stream.Read(binaryData, 0, (int)stream.Length);
                    fs.Write(binaryData, 0, binaryData.Length);
                }
            }
        }
    }
    catch(Exception ex)
    {
        System.Diagnostics.Debug.WriteLine("Note: Please make sure that Height and Width of the chart is set properly.");
        System.Diagnostics.Debug.WriteLine(ex.Message);
    }
}

/// <summary>
/// Get image MemoryStream from WriteableBitmap
/// </summary>
/// <param name="bitmap">WriteableBitmap</param>
/// <returns>MemoryStream</returns>
public static MemoryStream GetImageStream(WriteableBitmap bitmap)
{
    byte[][,] raster = ReadRasterInformation(bitmap);
    return EncodeRasterInformationToStream(raster, ColorSpace.RGB);
} 

/// <summary>
/// Reads raster information from WriteableBitmap
/// </summary>
/// <param name="bitmap">WriteableBitmap</param>
/// <returns>Array of bytes</returns>
public static byte[][,] ReadRasterInformation(WriteableBitmap bitmap)
{
    int width = bitmap.PixelWidth;
    int height = bitmap.PixelHeight;
    int bands = 3;
    byte[][,] raster = new byte[bands][,];

    for (int i = 0; i < bands; i++)
    {
        raster[i] = new byte[width, height];
    }

    for (int row = 0; row < height; row++)
    {
        for (int column = 0; column < width; column++)
        {
            int pixel = bitmap.Pixels[width * row + column];
            raster[0][column, row] = (byte)(pixel >> 16);
            raster[1][column, row] = (byte)(pixel >> 8);
            raster[2][column, row] = (byte)pixel;
        }
    }

    return raster;
}

/// <summary>
/// Encode raster information to MemoryStream
/// </summary>
/// <param name="raster">Raster information (Array of bytes)</param>
/// <param name="colorSpace">ColorSpace used</param>
/// <returns>MemoryStream</returns>
public static MemoryStream EncodeRasterInformationToStream(byte[][,] raster, ColorSpace colorSpace)
{
    ColorModel model = new ColorModel { colorspace = ColorSpace.RGB };
    FluxJpeg.Core.Image img = new FluxJpeg.Core.Image(model, raster);

    //Encode the Image as a JPEG
    MemoryStream stream = new MemoryStream();
    FluxJpeg.Core.Encoder.JpegEncoder encoder = new FluxJpeg.Core.Encoder.JpegEncoder(img, 100, stream);
    encoder.Encode();

    // Back to the start
    stream.Seek(0, SeekOrigin.Begin);

    return stream;
}

You can download the complete solution here

(Hat tip to Visifire user Sagi Karni, Intel Corp)

Cheers,
Team Visifire


Next Page »