
Introduction
This article shows you how to create a line chart for web forms using C#. I think there are several third party components available for creating line chart and graphs. It wouldn't get you a knowledge on how internally it works. Hence I have created a line chart using GDI+ in C#. Besides this, you will be able to create a line chart in a quick manner.
Using the code
Below are the code for functions used to create the line chart:
Line2D.cs
Declaration section: declare these variables.
private int m_Width = 700;
private int m_Height = 400;
private ArrayList m_XAxis;
private ArrayList m_YAxis;
private Color m_graphColor = Color.Red;
private float m_XSlice = 1;
private float m_YSlice = 1;
private Graphics objGraphics;
private Bitmap objBitmap;
private string m_XAxisText = "X-Axis";
private string m_YAxisText = "Y-Axis";
private string m_Title = "Line Graph";
private Color m_TitleBackColor = Color.Cyan;
private Color m_TitleForeColor = Color.Green;
The next step is to create a property variable which facilitates the user to get or set values for the line chart.
public int Width
{
get { return m_Width;}
set
{
if ( value > 200)
m_Width = value;
}
}
public int Height
{
get { return m_Height;}
set
{
if ( value > 200)
m_Height = value;
}
}
public ArrayList XAxis
{
set
{
m_XAxis = value;
}
get { return m_XAxis;}
}
public ArrayList YAxis
{
set { m_YAxis = value;}
get { return m_YAxis;}
}
public Color GraphColor
{
set { m_graphColor = value;}
get { return m_graphColor;}
}
public float XSlice
{
set { m_XSlice = value;}
get { return m_XSlice;}
}
public float YSlice
{
set { m_YSlice = value;}
get { return m_YSlice;}
}
public string XAxisText
{
get { return m_XAxisText;}
set { m_XAxisText = value;}
}
public string YAxisText
{
get { return m_YAxisText;}
set { m_YAxisText = value;}
}
public string Title
{
get { return m_Title;}
set { m_Title = value;}
}
public Color TitleBackColor
{
get { return m_TitleBackColor;}
set { m_TitleBackColor = value;}
}
public Color TitleForeColor
{
get { return m_TitleForeColor;}
set { m_TitleForeColor = value;}
}
The above code snippet shows the following: creates Graphics object, initializes the Graph, draws rectangle region and fills the region, draws X-Axis line and Y-Axis line, draws Origin (0,0) point and sets Axis text and creates title.
public void InitializeGraph()
{
objBitmap = new Bitmap(Width,Height);
objGraphics = Graphics.FromImage(objBitmap);
objGraphics.FillRectangle(new SolidBrush(Color.LightGray),0,0,Width,Height);
objGraphics.DrawLine(new Pen(new SolidBrush(Color.Black),2),
100,Height - 100,Width - 100,Height - 100);
objGraphics.DrawLine(new Pen(new SolidBrush(Color.Black),2),
100,Height - 100,100,10);
objGraphics.DrawString("0",new Font("Courier New",10),
new SolidBrush(Color.White),100,Height - 90);
SetAxisText(ref objGraphics);
CreateTitle(ref objGraphics);
}
This function creates Graph by calling SetPixel function which draws the line in the rectangle region. Pass Color for the line Graph as input parameter.
public void CreateGraph(Color _GraphColor)
{
GraphColor = _GraphColor;
SetPixels(ref objGraphics);
}
This function gets the bitmap image of the graph drawn.
public Bitmap GetGraph()
{
SetXAxis(ref objGraphics,XSlice);
SetYAxis(ref objGraphics,YSlice);
return objBitmap;
}
This function draws the axis line for the Graph.
private void PlotGraph(ref Graphics objGraphics,
float x1,float y1,float x2,float y2)
{
objGraphics.DrawLine(new Pen(new SolidBrush(GraphColor),2),
x1 + 100, (Height - 100) - y1 ,x2 + 100,(Height - 100) - y2 );
}
This function plots X and Y axis slices with given value ranges..
private void SetXAxis(ref Graphics objGraphics,float iSlices)
{
float x1 = 100,y1 = Height - 110,x2 = 100,y2 = Height - 90;
int iCount = 0;
int iSliceCount = 1;
for(int iIndex = 0;iIndex <= Width - 200;iIndex += 10)
{
if(iCount == 5)
{
objGraphics.DrawLine(new Pen(new SolidBrush(Color.Black)),
x1+iIndex,y1,x2+iIndex,y2);
objGraphics.DrawString(Convert.ToString(iSlices * iSliceCount),
new Font("verdana",8),new SolidBrush(Color.White),
x1 + iIndex - 10,y2);
iCount = 0;
iSliceCount++;
}
else
{
objGraphics.DrawLine(new Pen(new SolidBrush(Color.Goldenrod)),
x1+iIndex,y1+5,x2+iIndex,y2-5);
}
iCount++;
}
}
private void SetYAxis(ref Graphics objGraphics,float iSlices)
{
int x1 = 95;
int y1 = Height - 110;
int x2 = 105;
int y2 = Height - 110;
int iCount = 1;
int iSliceCount = 1;
for(int iIndex = 0;iIndex < Height - 200;iIndex+=10)
{
if(iCount == 5)
{
objGraphics.DrawLine(new Pen(new SolidBrush(Color.Black)),
x1 - 5, y1 - iIndex,x2 + 5,y2 - iIndex);
objGraphics.DrawString(Convert.ToString(iSlices * iSliceCount),
new Font("verdana",8),new SolidBrush(Color.White),
60,y1 - iIndex );
iCount = 0;
iSliceCount++;
}
else
{
objGraphics.DrawLine(new Pen(new SolidBrush(Color.Goldenrod)),
x1, (y1 - iIndex),x2,(y2 - iIndex));
}
iCount ++;
}
}
This function plots the points (x,y) in the graph.
private void SetPixels(ref Graphics objGraphics)
{
float X1 = float.Parse(XAxis[0].ToString());
float Y1 = float.Parse(YAxis[0].ToString());
if(XAxis.Count == YAxis.Count)
{
for(int iXaxis = 0,iYaxis =0;(iXaxis < XAxis.Count - 1
&& iYaxis < YAxis.Count - 1);iXaxis++,iYaxis++)
{
PlotGraph(ref objGraphics,X1,Y1,
float.Parse(XAxis[iXaxis + 1].ToString()),
float.Parse(YAxis[iYaxis + 1].ToString()));
X1 = float.Parse(XAxis[iXaxis + 1].ToString());
Y1 = float.Parse(YAxis[iYaxis + 1].ToString());
}
}
else
{
}
}
This function sets the text for both X and Y axis.
private void SetAxisText(ref Graphics objGraphics)
{
objGraphics.DrawString(XAxisText,new Font("Courier New",10),
new SolidBrush(Color.LimeGreen),
Width / 2 - 50,Height - 50);
int X = 30;
int Y = (Height / 2 ) - 50;
for(int iIndex = 0;iIndex < YAxisText.Length;iIndex++)
{
objGraphics.DrawString(YAxisText[iIndex].ToString(),
new Font("Courier New",10),new SolidBrush(Color.LimeGreen),
X,Y);
Y += 10;
}
}
This function is used to set the Title text for the graph.
private void CreateTitle(ref Graphics objGraphics)
{
objGraphics.FillRectangle(new SolidBrush(TitleBackColor),
Height - 100,20,Height - 200,20);
Rectangle rect = new Rectangle(Height - 100,20,Height - 200,20);
objGraphics.DrawString(Title,new Font("Verdana",10),
new SolidBrush(TitleForeColor),rect);
}
Code for the Webform1.aspx.cs
The code for the class file is over and now we need to create an instance of this file in a Web Form which needs line graph, and set appropriate properties. Here I'm using Score Comparison report as an example (India Vs. Pakistan) to draw a line graph to compare the runs scored by both teams using line graph.
Line2D line2d = new Line2D();
line2d.Height = 400;
line2d.Width = 700;
line2d.XSlice = 50;
line2d.YSlice = 10;
line2d.XAxisText = "Runs";
line2d.YAxisText = "Overs"
line2d.Title = "India vs Pakistan";
line2d.TitleBackColor = Color.Linen;
line2d.TitleForeColor = Color.HotPink;
line2d.InitializeGraph();
ArrayList arX = new ArrayList();
ArrayList arY = new ArrayList();
arX.Add(0);arX.Add(120);arX.Add(150);arX.Add(175);arX.Add(210);
arY.Add(0);arY.Add(100);arY.Add(50);arY.Add(150);arY.Add(190);
line2d.XAxis = arX;
line2d.YAxis = arY;
line2d.CreateGraph(Color.LightCyan);
arX = new ArrayList();
arY = new ArrayList();
arX.Add(0);arX.Add(110);arX.Add(160);arX.Add(195);arX.Add(200);
arY.Add(0);arY.Add(10);arY.Add(90);arY.Add(150);arY.Add(160);
line2d.XAxis = arX;
line2d.YAxis = arY;
line2d.CreateGraph(Color.Red);
Bitmap bmp = line2d.GetGraph();
bmp.Save(Response.OutputStream,ImageFormat.Jpeg);
|
|
 |
 | Good Job timi2shoes | 11:45 3 Feb '09 |
|
|
 |
 | Professional chart control Florentin BADEA | 12:57 21 Mar '08 |
|
|
 |
 | Nice Pooya Musavi | 9:14 19 Oct '07 |
|
 |
Hi Great article,may you help me how i can add Visio shapes to my Windows Form using C#? I want to add some shapes programmatically and want to have them with sth written inside dynamically and also with connector shape? Any free .dll or Component? Thanks a lot
|
|
|
|
 |
 | nice article Pooya Musavi | 9:08 19 Oct '07 |
|
 |
Hi May you help me how i can add Visio shapes to my Windos Form using C#? I want to add some shapes programmatically and want to have them with sth written inside dynamically and also with connector shape? Any free .dll or component? Thanks a lot
|
|
|
|
 |
 | problem in this line chart source code wel come to our site | 20:35 15 Jan '07 |
|
 |
This code is working for silcing 50 only how to make it changable silcing. If we change slicing the slicing will be change but the graph is ploted is wrong it is same as for 50 slicing. Plz tell me how to draw changable measurement graph
|
|
|
|
 |
 | Converted from c# FFunsoft | 7:02 9 Nov '06 |
|
 |
Does anyone have this code converted to VB.net
Funsoft
|
|
|
|
 |
 | VB .net code does not show the graph curves sheetalap | 14:35 29 Oct '06 |
|
 |
hi i tried to run the vb .net code but it just shows the axes and not the data. It does not show the data plotted on the graph.
Please answer Thanks
|
|
|
|
 |
 | VB.NET ddmma | 6:12 21 Jun '06 |
|
 |
DEFAULT .VB ======================================== Imports System Imports System.Collections Imports System.ComponentModel Imports System.Data Imports System.Drawing Imports System.Web Imports System.Web.SessionState Imports System.Web.UI Imports System.Web.UI.WebControls Imports System.Web.UI.HtmlControls Imports System.Drawing.Imaging Namespace AkwrChart
''' ''' Summary description for WebForm1. ''' Public Class WebForm1 Inherits System.Web.UI.Page
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim line2d As Line2D = New Line2D line2d.Height = 400 line2d.Width = 700 line2d.XSlice = 50 line2d.YSlice = 10 line2d.XAxisText = "X TEXT" line2d.YAxisText = "Y TEXT" line2d.Title = "TITLE" line2d.TitleBackColor = Color.White line2d.TitleForeColor = Color.Blue line2d.InitializeGraph() Dim arX As ArrayList = New ArrayList Dim arY As ArrayList = New ArrayList
arX.Add(0) arX.Add(110) arX.Add(160) arX.Add(195) arX.Add(200) arX.Add(310) arX.Add(10) arX.Add(395) arX.Add(200)
arY.Add(0) arY.Add(10) arY.Add(90) arY.Add(150) arY.Add(160) arY.Add(10) arY.Add(90) arY.Add(150) arY.Add(160) line2d.XAxis = arX line2d.YAxis = arY line2d.CreateGraph(Color.Red) Dim bmp As Bitmap = line2d.GetGraph bmp.Save(Response.OutputStream, ImageFormat.Jpeg) End Sub
Protected Overrides Sub OnInit(ByVal e As EventArgs) ' ' CODEGEN: This call is required by the ASP.NET Web Form Designer. ' InitializeComponent() MyBase.OnInit(e) End Sub
''' ''' Required method for Designer support - do not modify ''' the contents of this method with the code editor. ''' Private Sub InitializeComponent()
End Sub End Class End Namespace
============================
LINE2D.VB ============================ Imports System Imports System.Drawing Imports System.Drawing.Drawing2D Imports System.Drawing.Imaging Imports System.Collections
Namespace AkwrChart
''' ''' Summary description for Line2D. ''' Public Class Line2D
Private _Width As Integer = 700
'Width of the rectangle container for graph. Private _Height As Integer = 400
'Height of the rectangle container for graph. Private _XAxis As ArrayList
'X-axis for the graph. Private _YAxis As ArrayList
'Y-Axis for the graph. Private _graphColor As Color = Color.Red
'Color of the line graph. Private _XSlice As Single = 1
'Slice for X Axis. Private _YSlice As Single = 1
'Slice for Y Axis. Private objGraphics As Graphics
Private objBitmap As Bitmap
Private _XAxisText As String = "X-Axis"
Private _YAxisText As String = "Y-Axis"
Private _Title As String = "Line Graph"
Private _TitleBackColor As Color = Color.Blue
Private _TitleForeColor As Color = Color.Red
'Default constructor. Public Sub New() MyBase.New()
End Sub
'Sets or Gets the Width for the rectangle container of graph. Public Property Width() As Integer Get Return _Width End Get Set(ByVal Value As Integer) If (Value > 200) Then _Width = Value End If 'else 'Width should be greater than 200. End Set End Property
'Sets or Gets the Height for the rectangle container of graph. Public Property Height() As Integer Get Return _Height End Get Set(ByVal Value As Integer) If (Value > 200) Then _Height = Value End If 'else 'Height should be greater than 200. End Set End Property
'Sets or Gets the X-Axis pixels for the graph. Public Property XAxis() As ArrayList Get Return _XAxis End Get Set(ByVal Value As ArrayList) _XAxis = Value End Set End Property
'Sets or Gets the Y-Axis pixels for the graph. Public Property YAxis() As ArrayList Get Return _YAxis End Get Set(ByVal Value As ArrayList) _YAxis = Value End Set End Property
'Sets or Gets the Color of the line Graph. Public Property GraphColor() As Color Get Return _graphColor End Get Set(ByVal Value As Color) _graphColor = Value End Set End Property
'Sets or Gets the X Axis Slice. Public Property XSlice() As Single Get Return _XSlice End Get Set(ByVal Value As Single) _XSlice = Value End Set End Property
'Sets or Gets the Y Axis Slice. Public Property YSlice() As Single Get Return _YSlice End Get Set(ByVal Value As Single) _YSlice = Value End Set End Property
'Sets or Gets the X-Axis Test. Public Property XAxisText() As String Get Return _XAxisText End Get Set(ByVal Value As String) _XAxisText = Value End Set End Property
'Sets or Gets the Y-Axis Test. Public Property YAxisText() As String Get Return _YAxisText End Get Set(ByVal Value As String) _YAxisText = Value End Set End Property
'Sets or Gets the title for the Graph. Public Property Title() As String Get Return _Title End Get Set(ByVal Value As String) _Title = Value End Set End Property
'Sets or Gets the title Backcolor. Public Property TitleBackColor() As Color Get Return _TitleBackColor End Get Set(ByVal Value As Color) _TitleBackColor = Value End Set End Property
'Sets or Gets the Title ForeColor. Public Property TitleForeColor() As Color Get Return _TitleForeColor End Get Set(ByVal Value As Color) _TitleForeColor = Value End Set End Property
Public Sub InitializeGraph() 'Creating a bitmap image with given height and width. objBitmap = New Bitmap(Width, Height) 'Getting the bitmap image into the graphics portion of the screen. objGraphics = Graphics.FromImage(objBitmap) 'Filling the rectangle portion of the graphics with custom color. objGraphics.FillRectangle(New SolidBrush(Color.White), 0, 0, Width, Height) 'Drawing X-Axis line. objGraphics.DrawLine(New Pen(New SolidBrush(Color.Black), 1), 100, (Height - 100), (Width - 100), (Height - 100)) 'Drawing Y-Axis line. objGraphics.DrawLine(New Pen(New SolidBrush(Color.Black), 1), 100, (Height - 100), 100, 10) 'Plotting Origin(0,0). objGraphics.DrawString("0", New Font("Courier New", 10), New SolidBrush(Color.Black), 100 - 20, (Height - 100)) 'Sets Axis text. SetAxisText(objGraphics) 'Sets the title for the Graph. CreateTitle(objGraphics) objGraphics.SmoothingMode = SmoothingMode.HighQuality End Sub
Public Sub CreateGraph(ByVal _GraphColor As Color) GraphColor = _GraphColor 'Plotting the pixels. SetPixels(objGraphics) End Sub Private Sub SetPixels(ByRef objGraphics As Graphics) Dim X1 As Single = Single.Parse(XAxis(0).ToString) Dim Y1 As Single = Single.Parse(YAxis(0).ToString) Dim iYaxis As Integer = 2 Dim iXaxis As Integer = 2 If (XAxis.Count = YAxis.Count) Then
Do While ((iXaxis < (XAxis.Count - 1)) AndAlso (iYaxis < (YAxis.Count - 1)))
iXaxis = (iXaxis + 1) iYaxis = (iYaxis + 1) Loop
PlotGraph(objGraphics, X1, Y1, Single.Parse(XAxis((iXaxis - 1)).ToString), Single.Parse(YAxis((iYaxis - 1)).ToString)) X1 = Single.Parse(XAxis((iXaxis - 1)).ToString) Y1 = Single.Parse(YAxis((iYaxis - 1)).ToString) Else 'X and Y axis length should be same. End If End Sub Public Function GetGraph() As Bitmap 'Creating X-Axis slices. SetXAxis(objGraphics, XSlice) 'Creating Y-Axis slices. SetYAxis(objGraphics, YSlice) Return objBitmap End Function
Private Sub PlotGraph(ByRef objGraphics As Graphics, ByVal x1 As Single, ByVal y1 As Single, ByVal x2 As Single, ByVal y2 As Single) objGraphics.DrawLine(New Pen(New SolidBrush(GraphColor), 2), (x1 + 100), ((Height - 100) - y1), (x2 + 100), ((Height - 100) - y2)) End Sub
Private Sub SetXAxis(ByRef objGraphics As Graphics, ByVal iSlices As Single) Dim y2 As Single = (Height - 90) Dim x1 As Single = 100 Dim y1 As Single = (Height - 110) Dim x2 As Single = 100 Dim iCount As Integer = 0 Dim iSliceCount As Integer = 1 Dim iIndex As Integer = 0 Do While (iIndex _ <= (Width - 200)) If (iCount = 5) Then objGraphics.DrawLine(New Pen(New SolidBrush(Color.Black)), (x1 + iIndex), y1, (x2 + iIndex), y2) objGraphics.DrawString(Convert.ToString((iSlices * iSliceCount)), New Font("verdana", 8), New SolidBrush(Color.White), (x1 _ + (iIndex - 10)), y2) iCount = 0 iSliceCount = (iSliceCount + 1) Else objGraphics.DrawLine(New Pen(New SolidBrush(Color.Silver)), (x1 + iIndex), (y1 + 5), (x2 + iIndex), (y2 - 5)) End If iCount = (iCount + 1) iIndex = (iIndex + 10) Loop End Sub
Private Sub SetYAxis(ByRef objGraphics As Graphics, ByVal iSlices As Single) Dim x1 As Integer = 95 Dim y1 As Integer = (Height - 110) Dim x2 As Integer = 105 Dim y2 As Integer = (Height - 110) Dim iCount As Integer = 1 Dim iSliceCount As Integer = 1 Dim iIndex As Integer = 0 Do While (iIndex _ < (Height - 200)) If (iCount = 5) Then objGraphics.DrawLine(New Pen(New SolidBrush(Color.Black)), (x1 - 5), (y1 - iIndex), (x2 + 5), (y2 - iIndex)) objGraphics.DrawString(Convert.ToString((iSlices * iSliceCount)), New Font("verdana", 8), New SolidBrush(Color.White), 60, (y1 - iIndex)) iCount = 0 iSliceCount = (iSliceCount + 1) Else objGraphics.DrawLine(New Pen(New SolidBrush(Color.Silver)), x1, (y1 - iIndex), x2, (y2 - iIndex)) End If iCount = (iCount + 1) iIndex = (iIndex + 10) Loop End Sub
Private Sub SetAxisText(ByRef objGraphics As Graphics) objGraphics.DrawString(XAxisText, New Font("Courier New", 10), New SolidBrush(Color.LimeGreen), ((Width / 2) _ - 50), (Height - 50)) Dim X As Integer = 30 Dim Y As Integer = ((Height / 2) _ - 50) Dim iIndex As Integer = 0 Do While (iIndex < YAxisText.Length) objGraphics.DrawString(YAxisText.ToString, New Font("Courier New", 10), New SolidBrush(Color.LimeGreen), X, Y) Y = (Y + 10) iIndex = (iIndex + 1) Loop End Sub
Private Sub CreateTitle(ByRef objGraphics As Graphics) objGraphics.FillRectangle(New SolidBrush(TitleBackColor), (Height - 100), 20, (Height - 200), 20) Dim rect As Rectangle = New Rectangle((Height - 100), 20, (Height - 200), 20) objGraphics.DrawString(XAxisText, New Font("Verdana", 10), New SolidBrush(TitleForeColor), New PointF(448, 0)) End Sub End Class End Namespace
|
|
|
|
 |
 | Hotspots (hyperlinks) elbowpipe | 1:28 9 May '06 |
|
 |
great application - but is there any easy way to make parts of the image into 'hotspots' ie. clicking on part of the graph line would take you to a popup window showing more detail?
|
|
|
|
 |
|
 |
Try to use MAP AREAS with dynamic values
|
|
|
|
 |
 | Create graph with other objects in the same page Leandro Engel | 8:02 11 Apr '05 |
|
 |
Hi everyone,
Is it possible to create the graph in the webform with other objects and texts?
When run the line below, every other page content disappear.
bmp.Save(Response.OutputStream,ImageFormat.Jpeg);
Thanks a lot.
|
|
|
|
 |
|
 |
Create another page... WebForm2.aspx
In this new page place an image tag referencing the WebForm1.aspx page
<img src="WebForm1.aspx" />
|
|
|
|
 |
|
 |
Thanks 
|
|
|
|
 |
 | How to change the Scale x-axis as a month(1-12) hkebreab | 6:33 18 Jan '05 |
|
 |
Hi can any one tell me how can I use x-axis for only month(1-12) and y-axis values let say 10 - 100. I have difficulty to convert my oun scale? Where I have to change to the scale to use the code. Please reply?
hkebreab
|
|
|
|
 |
|
 |
You need to change the way SetXAxis() and SetYAxis() work, in particular the values written by objGraphics.DrawString() in that function would need to be changed to the month instead of "iSlices * iSliceCount".
|
|
|
|
 |
 | how to use those function achan90 | 10:44 12 Jun '04 |
|
 |
Hi, All,
I'm new in ASP.net, and would like to use it to plot the line chart in the web page. Does anyone could teach me how to use those functions to plot the line chart? Thanks
|
|
|
|
 |
 | Job Vcherlop | 13:20 20 May '04 |
|
 |
Are you looking for job? Ping me.
|
|
|
|
 |
 | Good Stuff Kant | 10:48 16 Apr '04 |
|
 |
You got my Five.
Promise only what you can do. And then deliver more than what you promised. This signature was created by "Code Project Quoter".
|
|
|
|
 |
 | Nice job... MicrosoftBob | 1:54 16 Apr '04 |
|
 |
Here's an improvement that you can add to the InitializeGraph function:
objGraphics.SmoothingMode = SmoothingMode.HighQuality;
---
what's with all the 'm_' stuff? Yuck!
|
|
|
|
 |
|
 |
Whats wrong with that style?
Paul Watson wrote: "At the end of the day it is what you produce that counts, not how many doctorates you have on the wall." George Carlin wrote: "Don't sweat the petty things, and don't pet the sweaty things." Jörgen Sigvardsson wrote: If the physicists find a universal theory describing the laws of universe, I'm sure the a**hole constant will be an integral part of that theory.
|
|
|
|
 |
|
 |
Nothing, actually. I was just reaffirming my gawd-given right to be a cranky ass (as per Sigvardsson's quote?) in the morning.
Personally I prefer a single '_' or nothing at all in front of private member variables, but his code is easy to read (and nifty too).
I stand chastized.
|
|
|
|
 |
|
 |
Hi can you please tell me where I need to change the scale (x-axis as a month (1-12) and y-axis (10-100))? Thank you.
hkebreab
|
|
|
|
 |
|
 |
Is there a way to display markers on the lines
Funsoft
|
|
|
|
 |
 | JPEG vs. GIF Jos Branders | 23:40 15 Apr '04 |
|
 |
Nice work, Sivakumar.
Only one suggestion: it's better to use the GIF image format for charts. JPEG uses lossy compression, which causes some dither on egal surfaces.
Thanks for your contribution!
Jos
|
|
|
|
 |
|
 |
This JPEG thing is one of my pet peeves. It always bothers me when people post screenshots and other non photographic images as JPEGs. In fact, this would be a good topic for an article. I once posted a rant[^] about it to my weblog, unfortunately I'm the only one who reads it Anyway, here is a quote: JPEG is designed for compressing either full-color or gray-scale images of natural, real-world scenes
|
|
|
|
 |
|
|