Voilà un petit exemple commenté avec les fonctions PB sans callback sans brush et autres délices Microsoft.
J'ai mis en commentaire l'API GetTextExtentPoint32_() qui est prête à être utilisée pour retrouver les dimensions du texte pour le centrer ou autre avec (à ta charge de calculer le centrage) mais la fonction TextWidth() le fait aussi.
Code : Tout sélectionner
;- Gadgets
Enumeration 1
#ImageGadget_Origine
#ImageGadget_Ecrit
EndEnumeration
;- image
Enumeration 1
#Image_Origine
EndEnumeration
;// constante de la couleur rouge
#bleu = #blue
If OpenWindow(#PB_Any,0,0,400,200,"Texte sur image",#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
;// on charge l'image png
UsePNGImageDecoder()
If CatchImage(#Image_Origine, ?scalling_png) = 0
MessageRequester("Erreur", "Impossible de charger l'image"+Chr(10)+"L'application va se terminer", 16)
End
EndIf
;// on affiche à gauche l'image d'origine et à droite l'image avec le texte
If ImageGadget(#ImageGadget_Origine, 40, 40, 0, 0, ImageID(#Image_Origine)) = 0
MessageRequester("Erreur", "Impossible d'afficher l'image"+Chr(10)+"L'application va se terminer", 16)
End
EndIf
;// on affiche le texte "Essai PB"
Texte$ = "Essai PB"
;// on récupère le handle du contexte de périphérique retournée par StartDrawing() de PB
hdc = StartDrawing(ImageOutput(#Image_Origine))
;// toujours tester que l'opération a réussie, hdc doit être différent de 0
If hdc
;// on retrouve la taille de la chaine avec la police dce caractère associée au hdc
;// si on ne met pas de police, c'est la police associée (système) au hdc qui est utilisée
;// par l'API windows GetTextExtentPoint32_()
; If GetTextExtentPoint32_(hdc, Texte$, Len(Texte$), @lpSize.size) = 0
; MessageRequester("Erreur", "Erreur système"+Chr(10)+"L'application va se terminer", 16)
; StopDrawing()
; End
; EndIf
;// on écrit le texte en bleu sur fond transparent pour garder l'image
DrawingMode(#PB_2DDrawing_Transparent)
DrawText(10, 10, Texte$ , #bleu)
StopDrawing()
EndIf
;// on affiche à droite l'image d'origine avec le texte écrit dessus
If ImageGadget(#ImageGadget_Ecrit, GadgetWidth(#ImageGadget_Origine)+100, 40, 0, 0, ImageID(#Image_Origine)) = 0
MessageRequester("Erreur", "Impossible d'afficher l'image"+Chr(10)+"L'application va se terminer", 16)
End
EndIf
;// boucle d'événements
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
EndIf
End
DataSection
;// l'image qui suit est une image png
scalling_png:
Data.l $474E5089, $0A1A0A0D, $0D000000, $52444849, $82000000, $64000000
Data.l $00000208, $7F7CC500, $00000035, $4D497407, $04D70745, $3419040D
Data.l $5B0DB879, $09000000, $73594870, $C21E0000, $C21E0000, $75D06E01
Data.l $0000003E, $4D416704, $B1000041, $61FC0B8F, $01000005, $41444911
Data.l $EDDA7854, $800DC1D1, $41040C30, $A6A1B142, $F02D0B54, $998FB4B1
Data.l $76B64E02, $79AE739D, $FBA3DECF, $1F66B5EF, $FCE8EF58, $FF3D7B3D
Data.l $432090C8, $32090C82, $2090C824, $090C8243, $90C82432, $0C824320
Data.l $C8243209, $82432090, $2432090C, $432090C8, $32090C82, $2090C824
Data.l $090C8243, $90C82432, $0C824320, $C8243209, $82432090, $2432090C
Data.l $432090C8, $32090C82, $2090C824, $090C8243, $90C82432, $0C824320
Data.l $C8243209, $82432090, $2432090C, $432090C8, $32090C82, $2090C824
Data.l $090C8243, $90C82432, $0C824320, $C8243209, $82432090, $2432090C
Data.l $432090C8, $32090C82, $2090C824, $090C8243, $90C82432, $0C824320
Data.l $C8243209, $82432090, $2432090C, $432090C8, $32090C82, $2090C824
Data.l $090C8243, $90C82432, $0C824320, $C8243209, $82432090, $2432090C
Data.l $432090C8, $727C07C2, $FD83C605, $0000084F, $45490000, $42AE444E
Data.b 96, -126
EndDataSection