No se si se puede escribir texto sobre un control image. De todas formas he preparado una sub que debería solucionar tu problema.
Me ha costado pero al final lo he logrado. El tema era dejarte usar tu control image para que no tengas que cambiar nada, ya que imagino que usas un image para que se adapte la imagen cargada al tamaño del control, cosa que no hace el picturebox.
Aunque parezca complicado es facil de usar.
Código vb:
Ver originalSub EscribeEnControlImage(ByRef ControlImage As Image, _
ByVal PosX As Long, ByVal PosY As Long, ByVal Texto As String, _
Optional ByVal ColorTexto As ColorConstants = vbWhite, _
Optional ByVal ColorFondo As ColorConstants = vbBlack, _
Optional ByVal TamanioTexto As Currency = 8.25, _
Optional ByVal FuenteTexto As String = "MS Sans Serif")
Dim PicTemp1 As VB.PictureBox
Dim PicTemp2 As VB.PictureBox
Set PicTemp1 = Controls.Add("VB.PictureBox", "PicTemp1EscribeEnControlImage", ControlImage.Container)
Set PicTemp2 = Controls.Add("VB.PictureBox", "PicTemp2EscribeEnControlImage", ControlImage.Container)
PicTemp2.Height = ControlImage.Height
PicTemp2.Width = ControlImage.Width
PicTemp1.Picture = ControlImage.Picture
PicTemp1.AutoSize = True
PicTemp2.AutoRedraw = True
' COLORFONDO = -1 DEJA EL FONDO TRANSPARENTE Y SOLO MUESTRA EL TEXTO
If ColorFondo <> -1 Then
PicTemp2.FontTransparent = False
PicTemp2.BackColor = ColorFondo
End If
PicTemp2.PaintPicture PicTemp1.Picture, 0, 0, PicTemp2.ScaleWidth, PicTemp2.ScaleHeight, _
0, 0, PicTemp1.ScaleWidth, PicTemp1.ScaleHeight
Controls.Remove ("PicTemp1EscribeEnControlImage")
PicTemp2.ForeColor = ColorTexto
PicTemp2.CurrentX = PosX
PicTemp2.CurrentY = PosY
PicTemp2.Font.Size = TamanioTexto
PicTemp2.Font.Name = FuenteTexto
PicTemp2.Print Texto
Set ControlImage.Picture = PicTemp2.Image
Controls.Remove "PicTemp2EscribeEnControlImage"
End Sub
Imaginando que tu control image se llama "Image1" y que tienes ya colocado sobre él un label llamado "Label1".
Esta línea básica debería pintar el label en el control image con el mismo tamaño y color de letra y color de fondo del label.
Código vb:
Ver originalPrivate Sub Command1_Click()
EscribeEnControlImage Image1, _
Label1.Left - Image1.Left, Label1.Top - Image1.Top, _
Label1.Caption, _
Label1.ForeColor, Label1.BackColor, _
Label1.FontSize, _
Label1.FontName
End Sub
En mis pruebas el label dibujado quedaba un poco desplazado de posición, pero eso ajustalo tu como quieras, calculando el margen de error o metiendo las coordenadas exactas a mano.
La sub pasa la imagen a un picturebox, escribe el texto y devuelve la imagen al control image.
Lo malo es que el picturebox no tiene propiedad stretch y he tenido que "stretcharlo" yo mismo, ya que si no las coordenadas no coinciden y la imagen devuelta tiene el tamaño original y el texto descolocado.
Lo que más me ha costado ha sido aprender lo básico para crear y eliminar pictureboxes en tiempo de ejecución sin hacerte añadir al menos uno para usar de matriz.
Saludos