Windows Vista Forums

Draw a circle in WPF
  1. #1


    Tem Guest

    Draw a circle in WPF

    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


      My System SpecsSystem Spec

  2. #2


    Nicholas Paldino [.NET/C# MVP] Guest

    Re: Draw a circle in WPF

    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]
    - mvp@xxxxxx

    "Tem" <tem1232@xxxxxx> wrote in message
    news:eeG0X3HGIHA.3980@xxxxxx

    >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

      My System SpecsSystem Spec

  3. #3


    Tem Guest

    Re: Draw a circle in WPF

    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]" <mvp@xxxxxx> wrote in
    message news:EF26B6C7-FDF2-4E3A-85F4-4D9C608A85CE@xxxxxx

    > 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]
    > - mvp@xxxxxx
    >
    > "Tem" <tem1232@xxxxxx> wrote in message
    > news:eeG0X3HGIHA.3980@xxxxxx

    >>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
    >

      My System SpecsSystem Spec

  4. #4


    Nicholas Paldino [.NET/C# MVP] Guest

    Re: Draw a circle in WPF

    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]
    - mvp@xxxxxx

    "Tem" <tem1232@xxxxxx> wrote in message
    news:uEKSP6NGIHA.5360@xxxxxx

    >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]" <mvp@xxxxxx> wrote
    > in message news:EF26B6C7-FDF2-4E3A-85F4-4D9C608A85CE@xxxxxx

    >> 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]
    >> - mvp@xxxxxx
    >>
    >> "Tem" <tem1232@xxxxxx> wrote in message
    >> news:eeG0X3HGIHA.3980@xxxxxx

    >>>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
    >>
    >

      My System SpecsSystem Spec

  5. #5


    Laurent Bugnion, MVP Guest

    Re: Draw a circle in WPF

    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.RootImage)));
    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

      My System SpecsSystem Spec

  6. #6


    Tem Guest

    Re: Draw a circle in WPF

    Thank you for the example, there's one thing

    what should i replace this.RootImage with?


    Tem

    "Laurent Bugnion, MVP" <galasoft-lb@xxxxxx> wrote in message
    news:O$8YRUPGIHA.936@xxxxxx

    > 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.RootImage)));
    > 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

      My System SpecsSystem Spec

  7. #7


    Laurent Bugnion, MVP Guest

    Re: Draw a circle in WPF

    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" <galasoft-lb@xxxxxx> wrote in message
    > news:O$8YRUPGIHA.936@xxxxxx

    >> 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.RootImage)));
    >> 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

      My System SpecsSystem Spec

  8. #8


    Tem Guest

    Re: Draw a circle in WPF

    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);
    }


      My System SpecsSystem Spec

Draw a circle in WPF problems?

Similar Threads
Thread Thread Starter Forum Replies Last Post
red circle with slash on cd player was_one Vista hardware & devices 4 26 May 2009
Blue circle of doom Steve St Denis Vista performance & maintenance 1 04 Nov 2008
DVD Circle Slashed (International No Sign) RussE Vista General 4 27 Jan 2008
Circle Around Mouse when moving blink Vista General 6 14 Dec 2007
red/blue dot/circle emma b Vista General 0 12 Oct 2007