Ed

Ed

  • NA
  • 3
  • 0

Displaying Graphics on a Windows Form

Dec 15 2008 3:25 PM
Hello,

I'm a bit of a newbie here, so would appreciate some help on this one!

I want to write a program that will display a map on a windows form. The map is built up of a 2-dimensional array of objects (either Land or Water), of size  [1000, 1000], which represent whether that area of the map is land, or water. Eg. at Map[30, 50] there is a Land object, which means that at coordinates (30, 50), there is one square of land on the map. The Land and Water classes have a member called "colour", which defines the colour of that square on the map. Each square on the map has a side of length 1. So the map is just a load of squares all joined together.

Ok, so I now want to display this map on a form. To do this, I created a pictureBox on the form, and then created a graphics object, g, from this pictureBox. Next, I performed the following operations:

for (int i = 0; i < 1000; i ++)
{
for (int j = 0; j < 1000; j ++)
{
g.FillRectangle(new Pen(Map[i, j].colour).Brush, new Rectangle(i, j, 1, 1));
}
}

This basically colours in each square at coordinates (i, j) with the colour corresponding to whether it is land, or water, (green, or blue), at that location.

Essentially, this works. However, it is soooo slow to draw, and takes about 3 seconds just to draw the map. The map sweeps across the pictureBox over a period of 3 seconds, rather than just instantly displaying the map. This is not acceptable for the purpose of the program.

Therefore, I am wondering what the best way would be to display this map. I have 2 ideas, but I wouldn't know how to implement them. They are :
  • Using graphics buffers, which I have heard about, but have no idea how they work. Can anybody tell me how to use them?
  • Using DirectX rather than the basic graphics I am using (is it called GDI?)
Please could anybody advise on how to improve the performance of this program, so that I can just display the map instantly.

Thank you for your help :)

Ed.

Answers (1)