I have found a solution but I cannot believe it is optimal! The solution is to build a complete page with the following code in the page load:
Dim FinalBitmap As Bitmap
Dim NumMerits = Request.Params("Merits").ToString
Dim BarGraphPercent = Request.Params("BarGraph").ToString
Dim msStream As New MemoryStream
FinalBitmap.Save(msStream, ImageFormat.Png)
Response.ContentType = "image/png"
msStream.WriteTo(Response.OutputStream)
If Not IsNothing(FinalBitmap) Then FinalBitmap.Dispose()
In the main page I then link each row to a
"~/Pages/Register/GetGraph?Merits=3&BarGraph=80"
(or whatever that student's figures are)
This then results in 30 calls to the server, one for each image. Surely there is a better way than this!