il codice è basic, ma non avrai difficoltà a trasformarlo in c#

Allora, leggo una immagine dal disco, la bordo con un rettangolo rosso spesso 4px, scrivo al centro una stringa semitrasparente, salvo l'immagine nel disco.
'ultima istruzione salva l'immagine nel flusso di uscita (solo per pagine web)

codice:
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim immagineInput As String = "C:\dati\Prove Nicon\prova.jpg" 'percorso immagine
        Dim bmp As Bitmap = Nothing
        Dim gr As Graphics = Nothing
        Dim w As Integer = 4 'larghezza penna

        Try
            'recupero l'immagine
            bmp = DirectCast(System.Drawing.Image.FromFile(immagineInput), System.Drawing.Bitmap)

            'recupero l'oggetto graphics
            gr = Graphics.FromImage(bmp)

            'imposto la qualità
            gr.SmoothingMode = Drawing2D.SmoothingMode.HighQuality
            gr.PixelOffsetMode = Drawing2D.PixelOffsetMode.HighQuality
            gr.CompositingQuality = Drawing2D.CompositingQuality.HighQuality

            'disegno un rettangolo rosso che borda l'immagine, spesso w px
            gr.DrawRectangle(New Pen(Color.Red, (w + w)), 0, 0, bmp.Width, bmp.Height)

            'scrivo il carattere gX nel centro dell'immagine, colore giallo, semitrasparente
            Dim s As String = "gX"
            Dim f As New Font("Arial", 200, FontStyle.Regular, GraphicsUnit.Point)
            Dim size As SizeF = gr.MeasureString(s, f)

            gr.DrawString(s, f, New SolidBrush(Color.FromArgb(100, 255, 255, 0)), ((bmp.Width - size.Width) / 2), ((bmp.Height - size.Height) / 2))

            'salvo l'immagine nel disco
            bmp.Save("c:\tmp\prova1.jpg", System.Drawing.Imaging.ImageFormat.Jpeg)

            'salvo l'immagine nello stream di uscita
            bmp.Save(System.Web.HttpContext.Current.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg)


        Catch ex As Exception
            'stampo a video messaggio errore
            PrintLn(ex.ToString())

        Finally
            'libero le risorse
            If bmp IsNot Nothing Then bmp.Dispose()
            If gr IsNot Nothing Then gr.Dispose()

        End Try

    End Sub