Draw a circle in WPF

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Tem

    #1

    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

  • Nicholas Paldino [.NET/C# MVP]

    #2
    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@spam.guard. caspershouse.co m

    "Tem" <tem1232@yahoo. comwrote in message
    news:eeG0X3HGIH A.3980@TK2MSFTN GP03.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

    Comment

    • Tem

      #3
      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@spam.guard .caspershouse.c omwrote in
      message news:EF26B6C7-FDF2-4E3A-85F4-4D9C608A85CE@mi crosoft.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]
      - mvp@spam.guard. caspershouse.co m
      >
      "Tem" <tem1232@yahoo. comwrote in message
      news:eeG0X3HGIH A.3980@TK2MSFTN GP03.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
      >

      Comment

      • Nicholas Paldino [.NET/C# MVP]

        #4
        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@spam.guard. caspershouse.co m

        "Tem" <tem1232@yahoo. comwrote in message
        news:uEKSP6NGIH A.5360@TK2MSFTN GP03.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]" <mvp@spam.guard .caspershouse.c omwrote
        in message news:EF26B6C7-FDF2-4E3A-85F4-4D9C608A85CE@mi crosoft.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]
        > - mvp@spam.guard. caspershouse.co m
        >>
        >"Tem" <tem1232@yahoo. comwrote in message
        >news:eeG0X3HGI HA.3980@TK2MSFT NGP03.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
        >>
        >

        Comment

        • Laurent Bugnion, MVP

          #5
          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.OpenOr Create))
          {
          PngBitmapEncode r enc = new PngBitmapEncode r();
          enc.Frames.Add(
          BitmapFrame.Cre ate(CaptureScre enBitmap(this.R ootImage)));
          enc.Save(fs);
          }

          with:

          private BitmapSource CaptureScreenBi tmap(Panel panel)
          {
          return CaptureScreenBi tmap(panel,
          (int) panel.ActualWid th,
          (int) panel.ActualHei ght);
          }

          private BitmapSource CaptureScreenBi tmap(Visual target,
          int width,
          int height)
          {
          Rect bounds = VisualTreeHelpe r.GetDescendant Bounds(target);
          RenderTargetBit map renderBitmap
          = new RenderTargetBit map(width,
          height,
          96, 96,
          PixelFormats.Pb gra32);

          DrawingVisual visual = new DrawingVisual() ;
          using (DrawingContext context = visual.RenderOp en())
          {
          VisualBrush brush = new VisualBrush(tar get);
          context.DrawRec tangle(brush,
          null,
          new Rect(new Point(), bounds.Size));
          }
          renderBitmap.Re nder(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

          Comment

          • Tem

            #6
            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@bluewin.chwr ote in message
            news:O$8YRUPGIH A.936@TK2MSFTNG P06.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.OpenOr Create))
            {
            PngBitmapEncode r enc = new PngBitmapEncode r();
            enc.Frames.Add(
            BitmapFrame.Cre ate(CaptureScre enBitmap(this.R ootImage)));
            enc.Save(fs);
            }
            >
            with:
            >
            private BitmapSource CaptureScreenBi tmap(Panel panel)
            {
            return CaptureScreenBi tmap(panel,
            (int) panel.ActualWid th,
            (int) panel.ActualHei ght);
            }
            >
            private BitmapSource CaptureScreenBi tmap(Visual target,
            int width,
            int height)
            {
            Rect bounds = VisualTreeHelpe r.GetDescendant Bounds(target);
            RenderTargetBit map renderBitmap
            = new RenderTargetBit map(width,
            height,
            96, 96,
            PixelFormats.Pb gra32);
            >
            DrawingVisual visual = new DrawingVisual() ;
            using (DrawingContext context = visual.RenderOp en())
            {
            VisualBrush brush = new VisualBrush(tar get);
            context.DrawRec tangle(brush,
            null,
            new Rect(new Point(), bounds.Size));
            }
            renderBitmap.Re nder(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

            Comment

            • Laurent Bugnion, MVP

              #7
              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@bluewin.chwr ote in message
              news:O$8YRUPGIH A.936@TK2MSFTNG P06.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.OpenOr Create))
              >{
              > PngBitmapEncode r enc = new PngBitmapEncode r();
              > enc.Frames.Add(
              > BitmapFrame.Cre ate(CaptureScre enBitmap(this.R ootImage)));
              > enc.Save(fs);
              >}
              >>
              >with:
              >>
              >private BitmapSource CaptureScreenBi tmap(Panel panel)
              >{
              > return CaptureScreenBi tmap(panel,
              > (int) panel.ActualWid th,
              > (int) panel.ActualHei ght);
              >}
              >>
              >private BitmapSource CaptureScreenBi tmap(Visual target,
              > int width,
              > int height)
              >{
              > Rect bounds = VisualTreeHelpe r.GetDescendant Bounds(target);
              > RenderTargetBit map renderBitmap
              > = new RenderTargetBit map(width,
              > height,
              > 96, 96,
              > PixelFormats.Pb gra32);
              >>
              > DrawingVisual visual = new DrawingVisual() ;
              > using (DrawingContext context = visual.RenderOp en())
              > {
              > VisualBrush brush = new VisualBrush(tar get);
              > context.DrawRec tangle(brush,
              > null,
              > new Rect(new Point(), bounds.Size));
              > }
              > renderBitmap.Re nder(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

              Comment

              • Tem

                #8
                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.




                RenderTargetBit map rtb = new RenderTargetBit map(200, 200, 96, 96,
                PixelFormats.Pb gra32);

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

                rtb.Render(cir) ;

                PngBitmapEncode r png = new PngBitmapEncode r();
                png.Frames.Add( BitmapFrame.Cre ate(rtb));
                using (Stream fs= File.Create("te st.png"))
                {
                png.Save(fs);
                }

                Comment

                Working...