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 7 3212
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.
"ne**@OxfordEye.co.uk" 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
That makes perfect sense Mark, thanks ! :) I'll give it a go tomorrow.
Regards,
Todd.
"Mark R. Dawson" <Ma*********@discussions.microsoft.com> wrote in message
news:D7**********************************@microsof t.com... 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.
"ne**@OxfordEye.co.uk" 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
You can create a Graphics on any object that inherits from Image, including
Bitmap.
Consult: http://msdn.microsoft.com/library/de...ctiontogdi.asp
which references the
Graphics.FromImage method.
Which is to say, you can use the GDI drawing routines with a Bitmap as the
underlying surface. Then you can copy that bitmap anywhere you wish.
On the other hand, it would seem that you could just redraw the graph
whenever the Paint event was raised on the window from which you called the
CreateGraphics method. I.E. put the logic that creates the Graphics, and
which draws the graph all in one method, and invoke that method in the
handler for the Paint event for the control that holds the graph. Then when
your popup moves off the graph's window, the Paint event will trigger the
redrawing of the graph. That is the usual way to handle the situation, I
believe. No Bitmap needed.
"ne**@OxfordEye.co.uk" <ne**@oxfordeye.co.uk> wrote in message
news:dd**********@newsg4.svr.pol.co.uk... 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
Firstly, drawing the image property contents of a picture box to the picture
box is nonsensical because that's what it does anyway. If you need a custom
drawing solution for images inherit from control and lose the PictureBox
baggage.
Secondly, you should never render anthing using CreateGraphics. See the #1
most asked GDI+ FAQ question for why.
--
Bob Powell [MVP]
Visual C#, System.Drawing
Ramuseco Limited .NET consulting http://www.ramuseco.com
Find great Windows Forms articles in Windows Forms Tips and Tricks http://www.bobpowell.net/tipstricks.htm
Answer those GDI+ questions with the GDI+ FAQ http://www.bobpowell.net/faqmain.htm
All new articles provide code in C# and VB.NET.
Subscribe to the RSS feeds provided and never miss a new article.
"ne**@OxfordEye.co.uk" <ne**@oxfordeye.co.uk> wrote in message
news:dd**********@newsg4.svr.pol.co.uk... 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
Hi Fred,
I just worry that it will be too slow to redraw the graph.
Ive solved it now using Marks suggestion above,
Thanks for your post
Todd.
"Fred Mellender" <no****************@frontiernet.net> wrote in message
news:64*****************@news01.roc.ny... You can create a Graphics on any object that inherits from Image, including Bitmap. Consult: http://msdn.microsoft.com/library/de...ctiontogdi.asp which references the Graphics.FromImage method. Which is to say, you can use the GDI drawing routines with a Bitmap as the underlying surface. Then you can copy that bitmap anywhere you wish.
On the other hand, it would seem that you could just redraw the graph whenever the Paint event was raised on the window from which you called the CreateGraphics method. I.E. put the logic that creates the Graphics, and which draws the graph all in one method, and invoke that method in the handler for the Paint event for the control that holds the graph. Then when your popup moves off the graph's window, the Paint event will trigger the redrawing of the graph. That is the usual way to handle the situation, I believe. No Bitmap needed.
"ne**@OxfordEye.co.uk" <ne**@oxfordeye.co.uk> wrote in message news:dd**********@newsg4.svr.pol.co.uk... 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
err, thanks for your reply Bob.
Todd.
"Bob Powell [MVP]" <bob@_spamkiller_bobpowell.net> wrote in message
news:ut**************@tk2msftngp13.phx.gbl... Firstly, drawing the image property contents of a picture box to the picture box is nonsensical because that's what it does anyway. If you need a custom drawing solution for images inherit from control and lose the PictureBox baggage.
Secondly, you should never render anthing using CreateGraphics. See the #1 most asked GDI+ FAQ question for why.
-- Bob Powell [MVP] Visual C#, System.Drawing
Ramuseco Limited .NET consulting http://www.ramuseco.com
Find great Windows Forms articles in Windows Forms Tips and Tricks http://www.bobpowell.net/tipstricks.htm
Answer those GDI+ questions with the GDI+ FAQ http://www.bobpowell.net/faqmain.htm
All new articles provide code in C# and VB.NET. Subscribe to the RSS feeds provided and never miss a new article.
"ne**@OxfordEye.co.uk" <ne**@oxfordeye.co.uk> wrote in message news:dd**********@newsg4.svr.pol.co.uk... 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
Yep, thanks Mark, got it working in under 5mins using your suggestion.
Im new to C# and the GDI+ and get lost in the functions sometimes...
Thanks again for the quick reply
Todd.
"Mark R. Dawson" <Ma*********@discussions.microsoft.com> wrote in message
news:D7**********************************@microsof t.com... 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.
"ne**@OxfordEye.co.uk" 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 This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: felix |
last post by:
Hi,
I tried google and searched the old posts -- with no success. Like a
zillion of people before I have a problem when rendering transparent
PNGs with GDI+ and the C# Graphics class. The image...
|
by: James dean |
last post by:
I have heard that the video drivers in GDI+ are a big performance issue.
But is this only an issue with something like Games Programming i
think...is this wrong?. What about a drawing application...
|
by: James dean |
last post by:
Could someone explain how this works. I think the graphics card is used
to do blitting and drawing shapes like rectangles. How does it draw
using the Graphics card on the PC and why is this feature...
|
by: James dean |
last post by:
I want a good site that will show clearly how much more functionality
GDI+ has. I cannot seem to find anything other than sites that list
"some" of the new functionality that GDI+ offers. A...
|
by: Zanna |
last post by:
Hi all!
I'm in difficulty with this: I need to know the height of a text line that
is written with Graphics.DrawString().
In theory I need just to get the Graphics.MeasureString() result.
But...
| |
by: brianbasquille |
last post by:
Hello all,
Haven't been here in a while but undertaking a project where i'm
branching out the
(presumingly abandoned) open-source OpenHTPC (www.openhtpc.org) with
additional Personal Video...
|
by: Marcin Rzeznicki |
last post by:
Hello,
Do you think it is legitimate practice to mix GDI+ and GDI calls (via
Get/ReleaseHDC()) in paint event of a control? I've heard there is
possibility of performance loss while "locking"...
|
by: =?Utf-8?B?U2ltb24gVGFtbWFu?= |
last post by:
I was trying to double buffer a control while drawing on CE devices. The code
below is compiled under the compact framework but you can also run it on the
desktop and it produces the same problem....
|
by: =?Utf-8?B?Um9oaXQ=?= |
last post by:
I have a timer object that calls UpdateWindow(). The WM_TIMER message is
processed in the main Win32 message loop for the window. However, when I run
the app, the image doesn't get updated (there...
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
| |
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
|
by: Hystou |
last post by:
Overview:
Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
|
by: isladogs |
last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM).
In this session, we are pleased to welcome a new...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
|
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated ...
| |
by: bsmnconsultancy |
last post by:
In today's digital era, a well-designed website is crucial for businesses looking to succeed. Whether you're a small business owner or a large corporation in Toronto, having a strong online presence...
| |