1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236
| ;
; ------------------------------------------------------------
;
; charger une image en streaming en local puis l'afficher by klr128
; avec l'image redimentionné ;encodage et decodage base64 pour envoi blob mysql
; va enregistrer les images dans la DB puis les charger
; ------------------------------------------------------------
;
;EnableExplicit
Global *DatabaseBuffer
Global scrollgad
Global offy=0
Global scrollgad2=10
Procedure CatchImageExCallback(Image)
OpenGadgetList(scrollgad2)
ImageGadget(#PB_Any, 0, offy, ImageWidth(Image), ImageHeight(Image), ImageID(Image))
CloseGadgetList()
offy=offy + ImageHeight(Image)+10
EndProcedure
Procedure CatchImageEx(Image, Base64String.s, Callback)
Protected W, H, IID
i=0
! var v_i = new Image();
! v_i.onload = function(){
! v_w = v_i.width;
! v_h = v_i.height;
If Image = #PB_Any
Image = CreateImage(#PB_Any, W, H)
Else
CreateImage(Image, W, H)
EndIf
IID = ImageID(Image)
! v_iid.getContext("2d").drawImage(v_i, 0, 0);
! v_callback(v_image);
! };
! console.log("hahassss "+v_base64string);
! v_i.src = v_base64string;
EndProcedure
Procedure CreateFileCallback(Status, Filename$, File, SizeRead)
Select Status
Case #PB_Status_Saved
Debug "Database file saved: " + Filename$
Debug "Please relaunch the program to test the persitency."
Case #PB_Status_Error
Debug "Can't save the database: " + Filename$
EndSelect
EndProcedure
Procedure OnaffDB() ;va suprimer les images présente dans le gadget scrollgad2
; ReadFile(0, "dbsqlitev3.sqlite", @ReadFileCallback(), #PB_LocalStorage)
nbb=0
! var GadgetElement = spider_GadgetID(v_scrollgad2).div;
! var tt =GadgetElement.childNodes;
! spider.debug.Print(GadgetElement);
! var tt2 =tt[0].childNodes;
! v_nbb = tt2.length;
! spider.debug.Print(v_nbb);
For sd=0 To nbb-1
! tt2[v_nbb-1-v_sd].remove();
Next
Debug "delet fin"
offy=0
EndProcedure
Procedure Loaded(Type, Filename$, ObjectId)
If ImageWidth(ObjectId)>=ImageHeight(ObjectId)
vv.f= (300-40)*100/ImageWidth(ObjectId)
bob=ResizeImage(ObjectId, (300-40), ImageHeight(ObjectId)*vv/100);,#PB_Image_Raw)
Else
vv.f= (300 -40)*100/ImageHeight(ObjectId) ;380 -90
bob= ResizeImage(ObjectId, ImageWidth(ObjectId)*vv/100, (300-40))
EndIf
IDD = ImageID(bob) ;ObjectId) ;
base64encodeimg.s = "";
! v_base64encodeimg = v_idd.toDataURL();
*Buffer = AllocateMemory( Len(base64encodeimg) )
PokeS(*Buffer, 0, base64encodeimg)
If OpenDatabase(0, *DatabaseBuffer) ; Now check if it's really in the db
SetDatabaseString(0, 0, "blob test")
SetDatabaseBlob(0, 1, *Buffer, MemorySize(*Buffer)) ; Assign it to the 2nd paramater
DatabaseUpdate(0, "INSERT INTO food (name, image) VALUES (?, ?);")
OnaffDB() ;pour sup image précédente av rafrechissement
*DatabaseBuffer = ExportDatabaseMemory(DB)
If CreateFile(0, "dbsqlitev3.sqlite", @CreateFileCallback(), #PB_LocalStorage)
WriteData(0, *DatabaseBuffer, 0, MemorySize(*DatabaseBuffer))
CloseFile(0)
EndIf
If DatabaseQuery(0, "SELECT * FROM food")
While NextDatabaseRow(0)
Debug "name: '" + GetDatabaseString(0, 0) + "', blob size: " + MemorySize(GetDatabaseBlob(0, 1))
*Buffertmp =GetDatabaseBlob(0, 1)
ooo.s="";
sizebuff = MemorySize(GetDatabaseBlob(0, 1))
For o=0 To sizebuff
ooo = ooo+ Chr( PeekB( *Buffertmp ,o) )
Next
Debug ooo
CatchImageEx(0, ooo, @CatchImageExCallback())
Wend
EndIf
FinishDatabaseQuery(0)
Else
Debug "OpenDatabase() failed"
EndIf
FreeImage(bob)
EndProcedure
Procedure LoadingError(Type, Filename$, ObjectId)
Debug Filename$ + ": loading error"
EndProcedure
Enumeration
#SelectFileGadget
#ProgressGadget
EndEnumeration
#ChunkSize = 1024 * 1024 ; 1 MB chunk
Global *Buffer = AllocateMemory(#ChunkSize) ; Allocate a global memory buffer to avoid realloc
Procedure ReadCallback(Status, Filename$, File, Size)
If Status = #PB_Status_Loaded
ReadData(1, *Buffer, 0, Size) ; Read all data into the memory buffer
AddFingerprintBuffer(1, *Buffer, 0, Size) ; Continue the fingerprint calculation
SetGadgetState(#ProgressGadget, (Loc(0) * 100) / Lof(0)) ; Update the progressbar
If Not Eof(1)
FetchData(1, #ChunkSize) ; Continue the reading if the end of file hasn't be reach yet
Else
LoadImage(1, Filename$,#PB_LocalFile);"Data/SpiderBasicLogo.png")
EndIf
ElseIf Status = #PB_Status_Error
Debug "Error when loading the file: " + Filename$
EndIf
EndProcedure
Procedure OpenFileRequesterCallback() ; Start the read the file, in stream mode
If NextSelectedFile()
If ReadFile(1, SelectedFileID(), @ReadCallback(), #PB_LocalFile | #PB_File_Streaming)
StartFingerprint(1, #PB_Cipher_MD5) ; Initialize fingerprint calc
FetchData(1, #ChunkSize) ; Read the first chunk from the file
EndIf
EndIf
EndProcedure
Procedure ChooseFileEvent()
OpenFileRequester("*.txt", @OpenFileRequesterCallback())
EndProcedure
Procedure ReadFileCallback(Status, Filename$, File, SizeRead)
Select Status
Case #PB_Status_Loaded
;Debug "bob Database file found and loaded: " + Filename$ ; Get all the file as a memory buffer
*DatabaseBuffer = ExportFileMemory(File)
If OpenDatabase(0, *DatabaseBuffer)
Debug "OpenDatabase() created with previous database data. Performing a query..."
If DatabaseQuery(0, "SELECT * FROM food")
;Debug "erreur?: "+DatabaseError()
id=0
While NextDatabaseRow(0)
Debug Str(id)+" name: '" + GetDatabaseString(0, 0) + "', blob size: " + MemorySize(GetDatabaseBlob(0, 1))
id=id+1
*Buffertmp =GetDatabaseBlob(0, 1)
ooo.s="";
sizebuff = MemorySize(GetDatabaseBlob(0, 1))
For o=0 To sizebuff
ooo = ooo+ Chr( PeekB( *Buffertmp ,o) )
Next
;Debug ooo
CatchImageEx(0, ooo, @CatchImageExCallback())
Wend
FinishDatabaseQuery(0)
Else
Debug "DatabaseQuery() failed: " + DatabaseError()
EndIf
;CloseDatabase(0)
Else
Debug "OpenDatabase() failed"
EndIf
Case #PB_Status_Error
Debug "Database not found in localstorage: " + Filename$
Debug "Creating a new database..."
If OpenDatabase(0)
DatabaseUpdate(0, "CREATE TABLE food (name CHAR(50), image BLOB)")
;DatabaseUpdate(0, "INSERT INTO superheroes (firstname, name, weight) Values ('Peter', 'Parker', '80.8')")
;DatabaseUpdate(0, "INSERT INTO superheroes (firstname, name, weight) Values ('Bruce', 'Wayne', '70.5')")
;DatabaseUpdate(0, "INSERT INTO superheroes (firstname, name, weight) Values ('Clark', 'Kent', '75.1')")
*DatabaseBuffer = ExportDatabaseMemory(DB) ; Now save the database to a persistent file
If CreateFile(0, "dbsqlitev3.sqlite", @CreateFileCallback(), #PB_LocalStorage)
WriteData(0, *DatabaseBuffer, 0, MemorySize(*DatabaseBuffer))
CloseFile(0)
EndIf
CloseDatabase(0)
Else
Debug "OpenDatabase() failed"
EndIf
EndSelect
EndProcedure
If OpenWindow(0, 0, 0, 300, 480, "charger une image par morceaux", #PB_Window_ScreenCentered)
scrollgad =ScrollAreaGadget(#PB_Any, 0, 5, WindowWidth(0), WindowHeight(0)-10, WindowWidth(0), 2000,#PB_ScrollArea_Single) ;#PB_Any
! var GadgetElement = spider_GadgetID(v_scrollgad).div;
! GadgetElement.style.scrollbarWidth = 'none';
; PanelGadget(pannel, 5, 5, WindowWidth(0)-10, WindowHeight(0)-10)
; AddGadgetItem(pannel, -1, "charger") ;-- pannel compte
ButtonGadget(#SelectFileGadget, 10, 10, 280, 25, "charger une image")
TextGadget(#PB_Any, 10, 45, 60, 25, "Progression: ")
ProgressBarGadget(#ProgressGadget, 70, 45, 220, 25, 0, 100)
BindGadgetEvent(0, @ChooseFileEvent())
btn_aff = ButtonGadget(#PB_Any, 10, 90, 150, 25, "clear images")
BindGadgetEvent(btn_aff, @OnaffDB())
ScrollAreaGadget(scrollgad2, 0, 120, WindowWidth(0), WindowHeight(0)-120-20+9, WindowWidth(0)-20, 2000,#PB_ScrollArea_Single) ;#PB_Any
CloseGadgetList()
;AddGadgetItem(pannel, -1, "afficher") ;-- pannel compte
;CloseGadgetList()
ReadFile(0, "dbsqlitev3.sqlite", @ReadFileCallback(), #PB_LocalStorage)
EndIf
; Register the loading event before calling any resource load command
BindEvent(#PB_Event_Loading, @Loaded())
BindEvent(#PB_Event_LoadingError, @LoadingError()) |