works. But I do not understand what I then need the Drawing Context for in the first place? (I tried removing the two bm_dc lines, but then I do'nt see anything.)
(Static) Pict values can be thought as combined geometric objects. To get an image out of a Pict, Bitmap creates a blank canvas and then def bm_dc = bm.make_dc() prepares a drawing context, or a collection of bm-specific tools like pens and brushes which all draw on bm. Finally, p.draw(bm_dc) tells the p to draw itself (the collection of geometric objects) using the pens and brushes from bm_dc as a painting on the canvas.
An interesting point is that the drawing context is stateful and remembers which pen or which brush it is using. So, when a drawing context reacts to an instruction like draw-rectangle, it uses the color/style associated with the current pen/brush.
Here are some example programs of drawing contexts in Racket: 1 Overview.
The Drawing Context interface is more general—bitmaps are not the only things you can draw to!
There are other drawing contexts available to generate vector graphics formats, like SVG, PDF, and EPS, and the GUI libraries add Drawing Contexts for drawing on the screen.