By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
448,805 Members | 1,640 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 448,805 IT Pros & Developers. It's quick & easy.

Draw a circle in WPF

P: n/a
Tem
I need to draw a black lined circle and save it as a gif file. Can this be
done with wpf or do I need to use GDI+
The examples I found seem to only apply to UI elements not a file.

Thank you

Tem

Oct 27 '07 #1
Share this Question
Share on Google+
7 Replies


P: n/a
Tem,

This can be done in both WPF and in Windows Forms (through GDI). The
thing is, what are YOU using? If you are using Windows Forms, then in the
method you use to paint, you can use the DrawEllipse method on the Graphics
instance to draw a circle (just make sure to use a square for the bounding
coordinates and it will produce a circle).

In WPF, you should just be able to add an Ellipse element into your XAML
with the same height and width.

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Tem" <te*****@yahoo.comwrote in message
news:ee**************@TK2MSFTNGP03.phx.gbl...
>I need to draw a black lined circle and save it as a gif file. Can this be
done with wpf or do I need to use GDI+
The examples I found seem to only apply to UI elements not a file.

Thank you

Tem
Oct 27 '07 #2

P: n/a
Tem
I would like to use WPF because is the newer technology. However I could not
find a code sample on how to do this.
This is what I need to do

The app has a button called generate circle
when the buttons is clicked it generates a gif file of a circle in the local
dir.

From what I understand I don't need to use XAML, no UI here, just need to
generate a gif file

Thank you,

Tem
"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.comwrote in
message news:EF**********************************@microsof t.com...
Tem,

This can be done in both WPF and in Windows Forms (through GDI). The
thing is, what are YOU using? If you are using Windows Forms, then in the
method you use to paint, you can use the DrawEllipse method on the
Graphics instance to draw a circle (just make sure to use a square for the
bounding coordinates and it will produce a circle).

In WPF, you should just be able to add an Ellipse element into your
XAML with the same height and width.

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Tem" <te*****@yahoo.comwrote in message
news:ee**************@TK2MSFTNGP03.phx.gbl...
>>I need to draw a black lined circle and save it as a gif file. Can this be
done with wpf or do I need to use GDI+
The examples I found seem to only apply to UI elements not a file.

Thank you

Tem
Oct 27 '07 #3

P: n/a
If you are generating a GIF file, then you are better off creating a new
Bitmap instance and then getting the Graphics instance for the bitmap
(through the static FromImage method on the Graphics class). Draw on that
using the Graphics instance, and then you can save the Bitmap (as a GIF of
course).
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Tem" <te*****@yahoo.comwrote in message
news:uE**************@TK2MSFTNGP03.phx.gbl...
>I would like to use WPF because is the newer technology. However I could
not find a code sample on how to do this.
This is what I need to do

The app has a button called generate circle
when the buttons is clicked it generates a gif file of a circle in the
local dir.

From what I understand I don't need to use XAML, no UI here, just need to
generate a gif file

Thank you,

Tem
"Nicholas Paldino [.NET/C# MVP]" <mv*@spam.guard.caspershouse.comwrote
in message news:EF**********************************@microsof t.com...
>Tem,

This can be done in both WPF and in Windows Forms (through GDI). The
thing is, what are YOU using? If you are using Windows Forms, then in
the method you use to paint, you can use the DrawEllipse method on the
Graphics instance to draw a circle (just make sure to use a square for
the bounding coordinates and it will produce a circle).

In WPF, you should just be able to add an Ellipse element into your
XAML with the same height and width.

--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Tem" <te*****@yahoo.comwrote in message
news:ee**************@TK2MSFTNGP03.phx.gbl...
>>>I need to draw a black lined circle and save it as a gif file. Can this
be done with wpf or do I need to use GDI+
The examples I found seem to only apply to UI elements not a file.

Thank you

Tem
Oct 27 '07 #4

P: n/a
Hi,

Tem wrote:
I would like to use WPF because is the newer technology. However I could
not find a code sample on how to do this.
This is what I need to do

The app has a button called generate circle
when the buttons is clicked it generates a gif file of a circle in the
local dir.

From what I understand I don't need to use XAML, no UI here, just need
to generate a gif file

Thank you,

Tem
Saving any XAML scene to a picture is very easy. I prefer to use PNG, so
that's what this example is about, but I guess you can choose other formats:

using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
{
PngBitmapEncoder enc = new PngBitmapEncoder();
enc.Frames.Add(
BitmapFrame.Create(CaptureScreenBitmap(this.RootIm age)));
enc.Save(fs);
}

with:

private BitmapSource CaptureScreenBitmap(Panel panel)
{
return CaptureScreenBitmap(panel,
(int) panel.ActualWidth,
(int) panel.ActualHeight);
}

private BitmapSource CaptureScreenBitmap(Visual target,
int width,
int height)
{
Rect bounds = VisualTreeHelper.GetDescendantBounds(target);
RenderTargetBitmap renderBitmap
= new RenderTargetBitmap(width,
height,
96, 96,
PixelFormats.Pbgra32);

DrawingVisual visual = new DrawingVisual();
using (DrawingContext context = visual.RenderOpen())
{
VisualBrush brush = new VisualBrush(target);
context.DrawRectangle(brush,
null,
new Rect(new Point(), bounds.Size));
}
renderBitmap.Render(visual);
return renderBitmap;
}

HTH,
Laurent
--
Laurent Bugnion [MVP ASP.NET]
Software engineering, Blog: http://www.galasoft.ch
PhotoAlbum: http://www.galasoft.ch/pictures
Support children in Calcutta: http://www.calcutta-espoir.ch
Oct 28 '07 #5

P: n/a
Tem
Thank you for the example, there's one thing

what should i replace this.RootImage with?
Tem

"Laurent Bugnion, MVP" <ga*********@bluewin.chwrote in message
news:O$*************@TK2MSFTNGP06.phx.gbl...
Hi,

Tem wrote:
>I would like to use WPF because is the newer technology. However I could
not find a code sample on how to do this.
This is what I need to do

The app has a button called generate circle
when the buttons is clicked it generates a gif file of a circle in the
local dir.

From what I understand I don't need to use XAML, no UI here, just need
to generate a gif file

Thank you,

Tem

Saving any XAML scene to a picture is very easy. I prefer to use PNG, so
that's what this example is about, but I guess you can choose other
formats:

using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
{
PngBitmapEncoder enc = new PngBitmapEncoder();
enc.Frames.Add(
BitmapFrame.Create(CaptureScreenBitmap(this.RootIm age)));
enc.Save(fs);
}

with:

private BitmapSource CaptureScreenBitmap(Panel panel)
{
return CaptureScreenBitmap(panel,
(int) panel.ActualWidth,
(int) panel.ActualHeight);
}

private BitmapSource CaptureScreenBitmap(Visual target,
int width,
int height)
{
Rect bounds = VisualTreeHelper.GetDescendantBounds(target);
RenderTargetBitmap renderBitmap
= new RenderTargetBitmap(width,
height,
96, 96,
PixelFormats.Pbgra32);

DrawingVisual visual = new DrawingVisual();
using (DrawingContext context = visual.RenderOpen())
{
VisualBrush brush = new VisualBrush(target);
context.DrawRectangle(brush,
null,
new Rect(new Point(), bounds.Size));
}
renderBitmap.Render(visual);
return renderBitmap;
}

HTH,
Laurent
--
Laurent Bugnion [MVP ASP.NET]
Software engineering, Blog: http://www.galasoft.ch
PhotoAlbum: http://www.galasoft.ch/pictures
Support children in Calcutta: http://www.calcutta-espoir.ch
Oct 29 '07 #6

P: n/a
Hi,

Tem wrote:
Thank you for the example, there's one thing

what should i replace this.RootImage with?
Tem
In my example, the RootImage is the panel containing the scene that you
want to capture to an image. It can be a grid, a canvas, etc...

Laurent
>
"Laurent Bugnion, MVP" <ga*********@bluewin.chwrote in message
news:O$*************@TK2MSFTNGP06.phx.gbl...
>Hi,

Tem wrote:
>>I would like to use WPF because is the newer technology. However I
could not find a code sample on how to do this.
This is what I need to do

The app has a button called generate circle
when the buttons is clicked it generates a gif file of a circle in
the local dir.

From what I understand I don't need to use XAML, no UI here, just
need to generate a gif file

Thank you,

Tem

Saving any XAML scene to a picture is very easy. I prefer to use PNG,
so that's what this example is about, but I guess you can choose other
formats:

using (FileStream fs = new FileStream(path, FileMode.OpenOrCreate))
{
PngBitmapEncoder enc = new PngBitmapEncoder();
enc.Frames.Add(
BitmapFrame.Create(CaptureScreenBitmap(this.RootIm age)));
enc.Save(fs);
}

with:

private BitmapSource CaptureScreenBitmap(Panel panel)
{
return CaptureScreenBitmap(panel,
(int) panel.ActualWidth,
(int) panel.ActualHeight);
}

private BitmapSource CaptureScreenBitmap(Visual target,
int width,
int height)
{
Rect bounds = VisualTreeHelper.GetDescendantBounds(target);
RenderTargetBitmap renderBitmap
= new RenderTargetBitmap(width,
height,
96, 96,
PixelFormats.Pbgra32);

DrawingVisual visual = new DrawingVisual();
using (DrawingContext context = visual.RenderOpen())
{
VisualBrush brush = new VisualBrush(target);
context.DrawRectangle(brush,
null,
new Rect(new Point(), bounds.Size));
}
renderBitmap.Render(visual);
return renderBitmap;
}

HTH,
Laurent
--
Laurent Bugnion [MVP ASP.NET]
Software engineering, Blog: http://www.galasoft.ch
PhotoAlbum: http://www.galasoft.ch/pictures
Support children in Calcutta: http://www.calcutta-espoir.ch
--
Laurent Bugnion [MVP ASP.NET]
Software engineering, Blog: http://www.galasoft.ch
PhotoAlbum: http://www.galasoft.ch/pictures
Support children in Calcutta: http://www.calcutta-espoir.ch
Oct 29 '07 #7

P: n/a
Tem
I tried your example I was able to generate a png but it has nothing in it.
a blank picture.
Here's my code, it also gives me a blank file.

I cannot figure out why it doesn't work.


RenderTargetBitmap rtb = new RenderTargetBitmap(200, 200, 96, 96,
PixelFormats.Pbgra32);

Ellipse cir = new Ellipse();
cir.Height = 50;
cir.Width = 50;
cir.Stroke = Brushes.Black;
cir.StrokeThickness = 1.0;

rtb.Render(cir);

PngBitmapEncoder png = new PngBitmapEncoder();
png.Frames.Add(BitmapFrame.Create(rtb));
using (Stream fs= File.Create("test.png"))
{
png.Save(fs);
}

Oct 29 '07 #8

This discussion thread is closed

Replies have been disabled for this discussion.