Om du har bilden lagrad i din databas som en binary så måste du ju skapa en bild innan du kan skicka den till din websidor. Då har du ju skapat din bild som du kan manipulera.
Om du inte har bilderna i databasen utan endast länken till bilden, så får du använda Image objektet och LoadFromFile metoden för att skapa bilden, sen så kan du enkelt manipulera bilden.
Filen displayimage.aspx innehåller rimiligtvis kod för att hämta bilden från databasen och rendera den till klienten. Titta i koden för den sidan vad som händer.
Du bör ha ett image- eller bitmapobjekt som du kan skapa en Graphics-referens från och då kan du rita vad du vill på den ;)
Googla lite på t ex GDI+ eller så, så hittar du mer information om hur Graphics funkar.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim id_images As String = Request.QueryString("id_images")
Dim size As String = Request.QueryString("size")
Dim objCn As New System.Data.SqlClient.SqlConnection
Dim objCmd As New System.Data.SqlClient.SqlCommand
objCn.ConnectionString = "Data Source=(local);Initial Catalog=events;user=xx;password=xxx;"
objCmd.Connection = objCn
Dim strSQL = "SELECT \* FROM images WHERE id_images = '" & id_images & "'"
objCmd.CommandText = strSQL
Dim objAdapter As New System.Data.SqlClient.SqlDataAdapter
Dim objDs As New System.Data.DataSet
Dim objDataRow As System.Data.DataRow
objAdapter.SelectCommand = objCmd
objAdapter.Fill(objDs, "images")
objDataRow = objDs.Tables("images").Rows(0)
Response.ContentType = objDataRow.Item("LG_img_contenttype")
If size = "thumb" Then
Response.BinaryWrite(objDataRow.Item("SM_img_data"))
Else
Response.BinaryWrite(objDataRow.Item("LG_img_data"))
End If
objCn.Close()
End Sub
Man kan väl anta att fälten SM_img_data och LG_img_data innehåller ett gäng med bytes som du kan ladda in i ett Bitmapobjekt med hjälp av en ström... Testa läsa in fälten till en byte[], läs in arrayen till en MemoryStream som du sen skapar en Image av med Image.FromStream(memoryStream).
Man kan väl anta att fälten SM_img_data och LG_img_data innehåller ett gäng med bytes som du kan ladda in i ett Bitmapobjekt med hjälp av en ström... Testa läsa in fälten till en byte[], läs in arrayen till en MemoryStream som du sen skapar en Image av med Image.FromStream(memoryStream).
Nåt åt det hållet ;)
Kanon!
Det fungerade som du sa, du är en klippa!
Här är resultatet om andra vill använda.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim id_images As String = Request.QueryString("id_images")
Dim size As String = Request.QueryString("size")
Dim marker As String = Request.QueryString("marker")
Dim objCn As New System.Data.SqlClient.SqlConnection
Dim objCmd As New System.Data.SqlClient.SqlCommand
objCn.ConnectionString = "Data Source=(local);Initial Catalog=events;user=sa;password=L3ksand06AS;"
objCmd.Connection = objCn
Dim strSQL = "SELECT * FROM images WHERE id_images = '" & id_images & "'"
objCmd.CommandText = strSQL
Dim objAdapter As New System.Data.SqlClient.SqlDataAdapter
Dim objDs As New System.Data.DataSet
Dim objDataRow As System.Data.DataRow
objAdapter.SelectCommand = objCmd
objAdapter.Fill(objDs, "images")
objDataRow = objDs.Tables("images").Rows(0)
Response.ContentType = objDataRow.Item("LG_img_contenttype")
objCn.Close()
Dim objBitmap As Bitmap
Dim objGraphics As Graphics
If size = "thumb" Then
Dim bytImageData() As Byte = objDataRow.Item("SM_img_data")
Dim stmImageData As New MemoryStream(bytImageData)
objBitmap = New Bitmap(stmImageData)
Else
Dim bytImageData() As Byte = objDataRow.Item("LG_img_data")
Dim stmImageData As New MemoryStream(bytImageData)
objBitmap = New Bitmap(stmImageData)
End If
objGraphics = Graphics.FromImage(objBitmap)
objGraphics.DrawRectangle(New Pen(Color.Red, 4), x, y, width, height)
objGraphics.DrawLine(New Pen(Color.Red, 2), x1, y1, x2, y2)
objGraphics.DrawEllipse(New Pen(Color.Red, 2), New System.Drawing.Rectangle(x, y, width, height)))
objBitmap.Save(Response.OutputStream, ImageFormat.Gif)
objBitmap.Dispose()
objGraphics.Dispose()
End Sub