Expoitation des images.
Enregistrer ce code dans le dossier contenant la base de données que nous venons de créer. Exemple: Medias.pb
Ce code permet
-Sélectionner une image et l'enregistrer dans la base de données.
-Afficher chacune des images dans une fenêtre.
-Supprimer une image.
La base de données est ouverte qu'une seule fois lors de l’exécution et fermer quand on quitte l'application.
Code : Tout sélectionner
; PureBasic 5.70 LTS (x64)
EnableExplicit
Enumeration
#DataBase
#ImageFile
#Buffer
EndEnumeration
Enumeration Window
#MainForm
EndEnumeration
Enumeration Gadget
#Selector
EndEnumeration
;Plan du code
Declare Start() ;Début
Declare ShowMedia(LastSequence = #False) ;Affichage d'une ou des images
Declare OnSelectMedia() ;Sélection d'une image
Declare OnDeleteMedia() ;Suppression d'une image
Declare OnClose() ;Fin
Start()
Procedure Start()
UseJPEGImageDecoder()
UsePNGImageDecoder()
UseSQLiteDatabase()
OpenDatabase(#DataBase, "assets.sqlite", "","", #PB_Database_SQLite)
OpenWindow(#MainForm, 0, 0, 800, 600, "SQLite et les champs de type BLOB", #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_SizeGadget)
ButtonGadget(#Selector, 10, 10, 180, 32, "Sélectionner une image")
ShowMedia() ;Affichage de toutes les images
;Evenements
BindEvent(#PB_Event_CloseWindow, @OnClose())
BindGadgetEvent(#Selector, @OnSelectMedia())
Repeat : WaitWindowEvent(10) : ForEver
EndProcedure
;Affichage de la derniere image ou toutes les images
Procedure ShowMedia(LastSequence = #False)
Protected Window, IdMedia, ImageEncode.s, FileName.s, *Buffer, Result, Gadget
If LastSequence = #True
;Selection de la derniere image
DatabaseQuery(#DataBase, "SELECT IdMedia, image, filename FROM Medias ORDER BY IdMedia DESC LIMIT 1")
Else
;Selection de toutes les images
DatabaseQuery(#DataBase, "SELECT IdMedia, image, filename FROM Medias")
EndIf
;Affichage du resultat : Chaque image est affichée dans une fenetre
While NextDatabaseRow(#Database)
IdMedia = GetDatabaseLong(#Database, 0)
ImageEncode = GetDatabaseString(#Database, 1)
FileName = GetDatabaseString(#DataBase, 2)
*Buffer = AllocateMemory(Len(ImageEncode)*1.35)
Result = Base64Decoder(ImageEncode, *Buffer, MemorySize(*Buffer))
If Result
ReAllocateMemory(*Buffer, Result)
CatchImage(#Buffer, *Buffer)
Window = OpenWindow(#PB_Any, 0, 0, ImageWidth(#Buffer), ImageHeight(#Buffer) + 50, FileName, #PB_Window_SystemMenu|#PB_Window_ScreenCentered|#PB_Window_TitleBar)
ImageGadget(#PB_Any, 0, 0, 0, 0, ImageID(#Buffer))
;Ajout du bouton de suppression
;Mémorisatio de l'index d'enregistrement
;Initialisation du Callback de suppression
Gadget = ButtonGadget(#PB_Any, 10, ImageHeight(#Buffer) + 10, 80, 22, "Supprimer")
SetGadgetData(Gadget, IdMedia)
BindGadgetEvent(Gadget, @OnDeleteMedia())
StickyWindow(Window, #True)
EndIf
Wend
EndProcedure
;Selection d'une image
Procedure OnSelectMedia()
Protected Pattern.s = "Image Files (*.bmp, *.jpg, *.png)|*.bmp;*.jpg;*.png"
Protected FileName.s = OpenFileRequester("Sélectionner une image", "", Pattern, 0)
Protected ImageEncode.s, *Buffer, Result.s
If FileName <> ""
;Lecture et encodage de l'image
If ReadFile(#ImageFile, FileName)
*Buffer = AllocateMemory(Lof(#ImageFile))
ReadData(#ImageFile, *Buffer, Lof(#ImageFile))
CloseFile(#ImageFile)
ImageEncode = Space(MemorySize(*Buffer)*1.35)
Result = Base64Encoder(*Buffer, MemorySize(*Buffer))
ImageEncode = RTrim(Result)
EndIf
;Enregistrement de l'image dans la base de données
DatabaseUpdate(#DataBase, "INSERT INTO medias (Image, FileName) VALUES ('" + ImageEncode + "', '" + GetFilePart(FileName) + "')")
;Affichage de la DERNIERE image insérée
ShowMedia(#True)
EndIf
EndProcedure
;Suppression d'une image
Procedure OnDeleteMedia()
Protected IdMedia = GetGadgetData(EventGadget())
DatabaseUpdate(#DataBase, "DELETE FROM Medias WHERE IdMedia=" + IdMedia)
If DatabaseError() <> ""
MessageRequester("Information", "Erreur lors de la suppression" + #CRLF$ + DatabaseError())
Else
CloseWindow(EventWindow())
EndIf
EndProcedure
Procedure OnClose()
Protected Window = EventWindow()
Select Window
Case #MainForm
CloseDatabase(#DataBase)
End
Default
CloseWindow(Window)
EndSelect
EndProcedure
Vous pouvez utiliser
SQLite Explorer pour voir la structure et les données de la base.