# Images

We're now going to look at creating images. The code library we use to create images is not built-in to Scala. You will need to add the following to the worksheet to be able to use it.

``````import cats.effect.unsafe.implicits.global
import doodle.core._
import doodle.image._
import doodle.syntax.all._
import doodle.image.syntax.all._
import doodle.java2d._``````

Let's start with some simple shapes, programming in the worksheet as we've done before.

``````Image.circle(10)
// res0: Image = Circle(d = 10.0)``````

What is happening here? `Image` is an object and `circle` a method on that object. We pass to `circle` a parameter, `10` that gives the diameter of the circle we're constructing. Note the type of the result: an `Image`.

``````Image.circle(10)
// res1: Image = Circle(d = 10.0)``````

We draw the circle by calling the `draw` method.

``Image.circle(10).draw()``

A window should appear as shown in Figure pictures:circle. Doodle supports a handful of "primitive" images: circles, rectangles, and triangles. Let's try drawing a rectangle.

``Image.rectangle(100, 50).draw()``

The output is shown in Figure pictures:rectangle. Finally let's try a triangle, for which the output is shown in Figure pictures:triangle.

``Image.triangle(60, 40).draw()`` ### Exercises

#### I Go Round in Circles

Create circles that are 1, 10, and 100 units wide. Now draw them!

##### Solution

In this exercise we're checking that our Doodle install is working correctly and we're getting used to using the library. One of the important points in Doodle is we separate defining the image from drawing the image. We'll talk more about this throughout the book.

We can create circles with the code below.

``````Image.circle(1)
Image.circle(10)
Image.circle(100)``````

We can draw the circles by calling the `draw` method on each circle.

``````Image.circle(1).draw()
Image.circle(10).draw()
Image.circle(100).draw()``````

#### My Type of Art

What is the type of a circle? A rectangle? A triangle?

##### Solution

They all have type `Image`, as we can tell from the console.

``````:type Image.circle(10)
// doodle.core.Image
:type Image.rectangle(10, 10)
// doodle.core.Image
:type Image.triangle(10, 10)
// doodle.core.Image``````

#### Not My Type of Art

What's the type of drawing an image? What does this mean?

##### Solution

Once again, we can ask the console this quesstion.

``````:type Image.circle(10).draw()
// Unit``````

We see that the type of drawing an image is `Unit`. `Unit` is the type of expressions that have no interesting value to return. This is the case for `draw`; we call it because we want something to appear on the screen, not because we have a use for the value it returns. There is only one value with type `Unit`. This value is also called unit, which written as a literal expression is `()`

You'll note that the console doesn't print unit by default.

``()``

We can ask the console for the type to show that there really is unit here.

``````:type ()
// Unit``````

Expressive Expressions→