C# GDI+ line rendering problem...

09/08/2005 - 00:02 por news | Informe spam
This may be a stupid question, but if I don't ask I'll never know ;)

Ok, here it goes I am writing an application that renders an image in
one picturebox and a graph in another.

The image is drawn by loading a jpg into a bitmap and then setting
picturebox.image = mybitmap. Ive created my own class, inheriting from the
picturebox and overriding the OnPaint event so I can do e.Graphics.DrawImage
(this.image). This renders correctly, without flicker and without
problems.

The problem comes with the graph... Im drawing the graph using GDI+ methods
with :-

myGraphic = PictureBox.CreateGraphics ();
myGraphic.DrawLine ();
etc.

I do this each time I believe the graph has changed.

The problem comes when I move a popup window across the two pictureboxes...
The image renders correctly but the graph will not and the popup window
erases the graph below it.

Ideally, I'd like to render the graph in a similar way to the image but I
can't find how to draw a line in a bitmap - I could write a line drawing
function but that seems a little extreme ;)

Can anyone help ? I think I need to render the graph into a bitmap and then,
in the OnPaint event, blit it to the screen... but how ?

Thanks for any help and sorry if this is obvious or stupid,

Todd
 

Leer las respuestas

#1 Mark R. Dawson
09/08/2005 - 01:23 | Informe spam
To braw a line on am image you need to use the graphics object, so for
example in the code below you create a new bitmap (you can use a pre-existing
image) and draw a line on it:

//Create a new bitmap to draw onto
Bitmap b = new
Bitmap(100,100,System.Drawing.Imaging.PixelFormat.Format24bppRgb);

Graphics g;
Pen p;
Point p1, p2;

try
{
//create graphics object that will allow us to draw on our bitmap
//notice how the bitmap is passed to the function
g = Graphics.FromImage(b);

//set up drawing object
p = new Pen(Color.Red);
p1 = new Point(0,0);
p2 = new Point(50,50);

//draw the line onto the bitmap
g.DrawLine(p, p1, p2);
}
finally
{
//important to make sure we tidy up
g.Dispose();
p.Dispose();
}


Now in your OnPaint method you just write the bitmap image to the control.

Hope that starts you in the right direction.

Mark.

"" wrote:

This may be a stupid question, but if I don't ask I'll never know ;)

Ok, here it goes I am writing an application that renders an image in
one picturebox and a graph in another.

The image is drawn by loading a jpg into a bitmap and then setting
picturebox.image = mybitmap. Ive created my own class, inheriting from the
picturebox and overriding the OnPaint event so I can do e.Graphics.DrawImage
(this.image). This renders correctly, without flicker and without
problems.

The problem comes with the graph... Im drawing the graph using GDI+ methods
with :-

myGraphic = PictureBox.CreateGraphics ();
myGraphic.DrawLine ();
etc.

I do this each time I believe the graph has changed.

The problem comes when I move a popup window across the two pictureboxes...
The image renders correctly but the graph will not and the popup window
erases the graph below it.

Ideally, I'd like to render the graph in a similar way to the image but I
can't find how to draw a line in a bitmap - I could write a line drawing
function but that seems a little extreme ;)

Can anyone help ? I think I need to render the graph into a bitmap and then,
in the OnPaint event, blit it to the screen... but how ?

Thanks for any help and sorry if this is obvious or stupid,

Todd



Preguntas similares