Show a basic storage type to handle a simple RGB raster graphics image,
and some primitive associated functions.

If possible provide a function to allocate an uninitialised image,
given its width and height, and provide 3 additional functions:

   one to fill an image with a plain RGB color,
   one to set a given pixel with a color,
   one to get the color of a pixel.


(If there are specificities about the storage or the allocation, explain those.)

These functions are used as a base for the articles in the category raster graphics operations, 
and a basic output function to check the results
is available in the article write ppm file.




using Images, Colors
 
Base.hex(p::RGB{T}) where T = join(hex(c(p), 2) for c in (red, green, blue))
function showhex(m::Matrix{RGB{T}}, pad::Integer=4) where T
    for r in 1:size(m, 1)
        println(" " ^ pad, join(hex.(m[r, :]), " "))
    end
end
 
w, h = 5, 7
cback = RGB(1, 0, 1)
cfore = RGB(0, 1, 0)
 
img = Array{RGB{N0f8}}(h, w);
println("Uninitialized image:")
showhex(img)
 
fill!(img, cback)
println("\nImage filled with background color:")
showhex(img)
 
img[2, 3] = cfore
println("\nImage with a pixel set for foreground color:")
showhex(img)