J'ai travailler tout mon week-end (quelque heures) a essayer divers chose
partit de rien et arriver a quelque chose de pas trop mal
Bien je vous explique tous ça:
Je croix si je me souvient bien que ma première idée a été de crée
une procédure pour faire une impression de mon écran
Chose que j'ai réussie très vite grasse a un petit code prix dans un autre
Une fois ça fait, j'ai penser a un logiciel de création de capture d'écran
en chaine, alors je poursuivie dans cette nouvel voie
Mais hélas j'ai butter bien vite sur un très gros problème !
En effet, la procédure qui me permettais de prendre l'écran en photo
c'est révéler plus que lente !
Mais aussi certaines commandes !
J'ai donc essayer d'optimiser un maximum le code !
Et j'y suis arriver a ma grande surprise !
Une fois tous ça réaliser j'ai commencer le travail dans cette voie
Cependant cella étais encore bien trop lent !
Après avoir compris quel étais le problème, je me suis mis a la création
de Thread pour la création des image en masse
Après pal mal de temps, le temps de tous mettre en place
je créa donc deux Thread charger de crée les images
Exemple: 100 images diviser par deux Thread = 50 chacun
Bon j'ai ramer pour mettre ça en place, j'ai donc par la suite utiliser
des « Semaphore » pour qu'il n'y est pas de conflit l'or de la création des images
Une fois ceci réaliser, je découvris que ce procéder fonctionnais bien !
Non seulement la vitesse de création d'images étais optimiser
mais aussi l'impression de celle-ci !
J'ai par la suite optimiser encore le code en mettent cette fois-ci 4 Thread !
Et cela a été un véritable succer !
Puis j'a i fait d'autre essaie, en mettent 5 Thread, puis 10 !!!
Mais je me rendi compte que cella ne fonctionnais pas du tous
oui en effet, les Thread se ralentissais les uns aux autres
du coup c'était bien moins rapide
Bien, j'ai enregistrer certaine étape de mon travail pour voir ce que j'ai fait
cependant je suis bien loin de terminer car trop de soucis de rapidité
surtout pour enregistrer par la suite les nombreuses images générer par le programme
Voilà, après avoir bosser, je vous demande votre aide pour savoir comment procéder pour
que sa ail beaucoup plus vite, le soucis n° 1 étang la rapidité du programme, il est a noté que
plus les images sont grand et moins vite va le programme, quoique ya des nuance tous
de même que je n'est pas saisie, bref je demande votre aide pour poursuivre !
1:
Code : Tout sélectionner
Global Image
Global X = 1
Global Y = 1
Global NumeroImage = 1
Global Largeur = 1600
Global Hauteur = 1200
Global ImageImpressionEcrant
Global Drawing
ImageImpressionEcrant = CreateImage(NumeroImage, Largeur ,Hauteur)
Drawing = StartDrawing(ImageOutput(NumeroImage))
Procedure ImpressionEcrant(NumeroImage, X ,Y ,Largeur ,Hauteur)
t = ElapsedMilliseconds()
GetDC_ = GetDC_(GetDesktopWindow_())
BitBlt_(Drawing, 0, 0, Largeur ,Hauteur, GetDC_, X, Y, #SRCCOPY)
ReleaseDC_(GetDesktopWindow_(), GetDC_)
t6 = ElapsedMilliseconds()
Debug t - t6
ProcedureReturn ImageImpressionEcrant
EndProcedure
UsePNGImageEncoder()
Enumeration
#Window_0
#Image
EndEnumeration
Procedure Open_Window_0()
If OpenWindow(#Window_0, 284, 107, 800, 600, "New window ( 0 )", #PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
EndIf
Repeat ; Start of the event loop
a + 1
Event = WaitWindowEvent(1) ; This line waits until an event is received from Windows
WindowID = EventWindow() ; The Window where the event is generated, can be used in the gadget procedures
GadgetID = EventGadget() ; Is it a gadget event?
EventType = EventType() ; The event type
image = ImpressionEcrant(1 ,1 ,1 ,1600 ,1200)
;SaveImage(#Image, "Image n°" + Str(a) + ".Png", #PB_ImagePlugin_PNG, 0, 32)
;Debug a
If Event = #PB_Event_Gadget
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
EndProcedure
Open_Window_0()
StopDrawing()
; IDE Options = PureBasic 4.51 (Windows - x86)
; CursorPosition = 19
; Folding = -
; EnableXP
; EnableUser
; EnableOnError
; EnableCompileCount = 176
; EnableBuildCount = 0
; EnableExeConstant
Code : Tout sélectionner
UsePNGImageEncoder()
Enumeration
#Window_0
EndEnumeration
Global ImageX = 1
Global ImageY = 1
Global LargeurImage = 1600
Global HauteurImage = 1200
Global NombreImage = 350
Global CreationImageThread1 = 0
Global CreationImageThread2 = 0
Global CreationImageThread3 = 0
Global CreationImageThread4 = 0
Global CreationImageThread5 = 0
Global CreationImageThread6 = 0
Global CreationImageThread7 = 0
Global CreationImageThread8 = 0
Global CreationImageThread9 = 0
Global CreationImageThread10 = 0
Global ImageRestante = 0
Global Thread1, Thread2, Thread3, Thread4, Thread5, Thread6, Thread7, Thread8, Thread9, Thread10
Global NombreImageTotaleCree
Global NewList StokageImage()
Global NewList StokageImage1()
Global NewList StokageImage2()
Global NewList StokageImage3()
Global NewList StokageImage4()
Global NewList StokageImage5()
Global NewList StokageImage6()
Global NewList StokageImage7()
Global NewList StokageImage8()
Global NewList StokageImage9()
Global NewList StokageImage10()
Global NewList NumeroImage()
Global NewList NumeroImage1()
Global NewList NumeroImage2()
Global NewList NumeroImage3()
Global NewList NumeroImage4()
Global NewList NumeroImage5()
Global NewList NumeroImage6()
Global NewList NumeroImage7()
Global NewList NumeroImage8()
Global NewList NumeroImage9()
Global NewList NumeroImage10()
Global Semaphore = CreateSemaphore()
SignalSemaphore(Semaphore)
; Procedure PrecalculationTailleImageMemoire(NombreImage, LargeurImage, HauteurImage)
; *MemoireID = AllocateMemory(LargeurImage * HauteurImage * NombreImage)
; If *MemoireID
; Debug "Taille aproximative d'une image = " + StrF(LargeurImage * HauteurImage * 2.512 / 1000 / 1000, 2) + " Mo"
; Debug "Taille Totale aproximative alouer actuellement = " + StrF(LargeurImage * HauteurImage * 2.512 * NombreImage / 1000 / 1000 * NombreImage, 0) + " Mo"
; FreeMemory(*MemoireID)
; Else
; Debug "Impossible d'allouer la mémoire demandée !"
; EndIf
; ProcedureReturn TailleImageMemoire
; EndProcedure
Procedure ComptabilisationImageCree(Image)
NombreImageTotaleCree + Image
ProcedureReturn NombreImageTotaleCree
EndProcedure
Procedure CreationImageThread1(Thread1)
t1 = ElapsedMilliseconds()
For NumeroImageThread1 = 1 To NombreImage / 10
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage1())
StokageImage1() = CreateImage(NumeroImageThread1, LargeurImage ,HauteurImage)
AddElement(NumeroImage1())
NumeroImage1() = NumeroImageThread1
SignalSemaphore(Semaphore)
Thread1 + 1
ImageRestante + 1
Next
t2 = ElapsedMilliseconds()
Debug "Le Thread 1 à mis " + Str(t2 - t1) + " Milisecondes pour crée " + Str(Thread1) + " Images"
CreationImageThread1 = 1
ComptabilisationImageCree(Thread1)
EndProcedure
Procedure CreationImageThread2(Thread2)
t3 = ElapsedMilliseconds()
For NumeroImageThread2 = NombreImage / 10 + 1 To NombreImage / 9
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage2())
StokageImage2() = CreateImage(NumeroImageThread2, LargeurImage ,HauteurImage)
AddElement(NumeroImage2())
NumeroImage2() = NumeroImageThread2
SignalSemaphore(Semaphore)
Thread2 + 1
ImageRestante + 1
Next
t4 = ElapsedMilliseconds()
Debug "Le Thread 2 à mis " + Str(t4 - t3) + " Milisecondes pour crée " + Str(Thread2) + " Images"
CreationImageThread2 = 1
ComptabilisationImageCree(Thread2)
EndProcedure
Procedure CreationImageThread3(Thread3)
t5 = ElapsedMilliseconds()
For NumeroImageThread3 = NombreImage / 9 + 1 To NombreImage / 8
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage3())
StokageImage3() = CreateImage(NumeroImageThread3, LargeurImage ,HauteurImage)
AddElement(NumeroImage3())
NumeroImage3() = NumeroImageThread3
SignalSemaphore(Semaphore)
Thread3 + 1
ImageRestante + 1
Next
t6 = ElapsedMilliseconds()
Debug "Le Thread 3 à mis " + Str(t6 - t5) + " Milisecondes pour crée " + Str(Thread3) + " Images"
CreationImageThread3 = 1
ComptabilisationImageCree(Thread3)
EndProcedure
Procedure CreationImageThread4(Thread4)
t7 = ElapsedMilliseconds()
For NumeroImageThread4 = NombreImage / 8 + 1 To NombreImage / 7
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage4())
StokageImage4() = CreateImage(NumeroImageThread4, LargeurImage ,HauteurImage)
AddElement(NumeroImage4())
NumeroImage4() = NumeroImageThread4
SignalSemaphore(Semaphore)
Thread4 + 1
ImageRestante + 1
Next
t8 = ElapsedMilliseconds()
Debug "Le Thread 4 à mis " + Str(t8 - t7) + " Milisecondes pour crée " + Str(Thread4) + " Images"
CreationImageThread4 = 1
ComptabilisationImageCree(Thread4)
EndProcedure
Procedure CreationImageThread5(Thread5)
t9 = ElapsedMilliseconds()
For NumeroImageThread5 = NombreImage / 7 + 1 To NombreImage / 6
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage5())
StokageImage5() = CreateImage(NumeroImageThread5, LargeurImage ,HauteurImage)
AddElement(NumeroImage5())
NumeroImage5() = NumeroImageThread5
SignalSemaphore(Semaphore)
Thread5 + 1
ImageRestante + 1
Next
t10 = ElapsedMilliseconds()
Debug "Le Thread 5 à mis " + Str(t10 - t9) + " Milisecondes pour crée " + Str(Thread5) + " Images"
CreationImageThread5 = 1
ComptabilisationImageCree(Thread5)
EndProcedure
Procedure CreationImageThread6(Thread6)
t11 = ElapsedMilliseconds()
For NumeroImageThread6 = NombreImage / 6 + 1 To NombreImage / 5
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage6())
StokageImage6() = CreateImage(NumeroImageThread6, LargeurImage ,HauteurImage)
AddElement(NumeroImage6())
NumeroImage6() = NumeroImageThread6
SignalSemaphore(Semaphore)
Thread6 + 1
ImageRestante + 1
Next
t12 = ElapsedMilliseconds()
Debug "Le Thread 6 à mis " + Str(t12 - t11) + " Milisecondes pour crée " + Str(Thread6) + " Images"
CreationImageThread6 = 1
ComptabilisationImageCree(Thread6)
EndProcedure
Procedure CreationImageThread7(Thread7)
t13 = ElapsedMilliseconds()
For NumeroImageThread7 = NombreImage / 5 + 1 To NombreImage / 4
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage7())
StokageImage7() = CreateImage(NumeroImageThread7, LargeurImage ,HauteurImage)
AddElement(NumeroImage7())
NumeroImage7() = NumeroImageThread7
SignalSemaphore(Semaphore)
Thread7 + 1
ImageRestante + 1
Next
t14 = ElapsedMilliseconds()
Debug "Le Thread 7 à mis " + Str(t14 - t13) + " Milisecondes pour crée " + Str(Thread7) + " Images"
CreationImageThread7 = 1
ComptabilisationImageCree(Thread7)
EndProcedure
Procedure CreationImageThread8(Thread8)
t15 = ElapsedMilliseconds()
For NumeroImageThread8 = NombreImage / 4 + 1 To NombreImage / 3
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage8())
StokageImage8() = CreateImage(NumeroImageThread8, LargeurImage ,HauteurImage)
AddElement(NumeroImage8())
NumeroImage8() = NumeroImageThread8
SignalSemaphore(Semaphore)
Thread8 + 1
ImageRestante + 1
Next
t16 = ElapsedMilliseconds()
Debug "Le Thread 8 à mis " + Str(t16 - t15) + " Milisecondes pour crée " + Str(Thread8) + " Images"
CreationImageThread8 = 1
ComptabilisationImageCree(Thread8)
EndProcedure
Procedure CreationImageThread9(Thread9)
t17 = ElapsedMilliseconds()
For NumeroImageThread9 = NombreImage / 3 + 1 To NombreImage / 2
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage9())
StokageImage9() = CreateImage(NumeroImageThread9, LargeurImage ,HauteurImage)
AddElement(NumeroImage9())
NumeroImage9() = NumeroImageThread9
SignalSemaphore(Semaphore)
Thread9 + 1
ImageRestante + 1
Next
t18 = ElapsedMilliseconds()
Debug "Le Thread 9 à mis " + Str(t18 - t17) + " Milisecondes pour crée " + Str(Thread9) + " Images"
CreationImageThread9 = 1
ComptabilisationImageCree(Thread9)
EndProcedure
Procedure CreationImageThread10(Thread10)
t19 = ElapsedMilliseconds()
For NumeroImageThread10 = NombreImage / 2 + 1 To NombreImage
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage10())
StokageImage10() = CreateImage(NumeroImageThread10, LargeurImage ,HauteurImage)
AddElement(NumeroImage10())
NumeroImage10() = NumeroImageThread10
SignalSemaphore(Semaphore)
Thread10 + 1
ImageRestante + 1
Next
t20 = ElapsedMilliseconds()
Debug "Le Thread 10 à mis " + Str(t20 - t19) + " Milisecondes pour crée " + Str(Thread10) + " Images"
CreationImageThread10 = 1
ComptabilisationImageCree(Thread10)
EndProcedure
Procedure ImpressionImage(ImageX ,ImageY ,LargeurImage ,HauteurImage)
t5 = ElapsedMilliseconds()
FirstElement(NumeroImage())
ForEach StokageImage()
;Debug NumeroImage()
DrawingImage = StartDrawing(ImageOutput(NumeroImage()))
GetDC_Image1 = GetDC_(GetDesktopWindow_())
BitBlt_(DrawingImage, 0, 0, LargeurImage ,HauteurImage, GetDC_Image1, ImageX, ImageY, #SRCCOPY)
ReleaseDC_(GetDesktopWindow_(), GetDC_Image1)
StopDrawing()
NextElement(NumeroImage())
Next
t6 = ElapsedMilliseconds()
Debug "Temps Impression Image = " + Str(t6 - t5)
CreationImageThread4 = 1
EndProcedure
Procedure EnregistrementImage()
t1 = ElapsedMilliseconds()
FirstElement(NumeroImage())
ForEach StokageImage()
a + 1
SaveImage(NumeroImage(), "Image n°" + Str(a) + ".Png", #PB_ImagePlugin_PNG)
NextElement(NumeroImage())
Next
t2 = ElapsedMilliseconds()
Debug "Temps Enregistrement Image = " + Str(t2 - t1)
EndProcedure
;PrecalculationTailleImageMemoire(NombreImage, LargeurImage, HauteurImage)
CreateThread(@CreationImageThread1(), 0)
CreateThread(@CreationImageThread2(), 0)
CreateThread(@CreationImageThread3(), 0)
CreateThread(@CreationImageThread4(), 0)
CreateThread(@CreationImageThread5(), 0)
CreateThread(@CreationImageThread6(), 0)
CreateThread(@CreationImageThread7(), 0)
CreateThread(@CreationImageThread8(), 0)
CreateThread(@CreationImageThread9(), 0)
CreateThread(@CreationImageThread10(), 0)
Repeat
Delay(1)
Until CreationImageThread1 = 1 And CreationImageThread2 = 1 And CreationImageThread3 = 1 And CreationImageThread4 = 1 And CreationImageThread5 = 1 And CreationImageThread6 = 1 And CreationImageThread7 = 1 And CreationImageThread8 = 1 And CreationImageThread9 = 1 And CreationImageThread10 = 1
Debug "Nombre d'image totale crée: " + Str(NombreImageTotaleCree)
ForEach StokageImage1()
AddElement(StokageImage())
StokageImage() = StokageImage1()
Next
ForEach StokageImage2()
AddElement(StokageImage())
StokageImage() = StokageImage2()
Next
ForEach StokageImage3()
AddElement(StokageImage())
StokageImage() = StokageImage3()
Next
ForEach StokageImage4()
AddElement(StokageImage())
StokageImage() = StokageImage4()
Next
ForEach StokageImage5()
AddElement(StokageImage())
StokageImage() = StokageImage5()
Next
ForEach StokageImage6()
AddElement(StokageImage())
StokageImage() = StokageImage6()
Next
ForEach StokageImage7()
AddElement(StokageImage())
StokageImage() = StokageImage7()
Next
ForEach StokageImage8()
AddElement(StokageImage())
StokageImage() = StokageImage8()
Next
ForEach StokageImage9()
AddElement(StokageImage())
StokageImage() = StokageImage9()
Next
ForEach StokageImage10()
AddElement(StokageImage())
StokageImage() = StokageImage10()
Next
ForEach NumeroImage1()
AddElement(NumeroImage())
NumeroImage() = NumeroImage1()
Next
ForEach NumeroImage2()
AddElement(NumeroImage())
NumeroImage() = NumeroImage2()
Next
ForEach NumeroImage3()
AddElement(NumeroImage())
NumeroImage() = NumeroImage3()
Next
ForEach NumeroImage4()
AddElement(NumeroImage())
NumeroImage() = NumeroImage4()
Next
ForEach NumeroImage5()
AddElement(NumeroImage())
NumeroImage() = NumeroImage5()
Next
ForEach NumeroImage6()
AddElement(NumeroImage())
NumeroImage() = NumeroImage6()
Next
ForEach NumeroImage7()
AddElement(NumeroImage())
NumeroImage() = NumeroImage7()
Next
ForEach NumeroImage8()
AddElement(NumeroImage())
NumeroImage() = NumeroImage8()
Next
ForEach NumeroImage9()
AddElement(NumeroImage())
NumeroImage() = NumeroImage9()
Next
ForEach NumeroImage10()
AddElement(NumeroImage())
NumeroImage() = NumeroImage10()
Next
;ImpressionImage(ImageX ,ImageY ,LargeurImage ,HauteurImage)
;EnregistrementImage()
; IDE Options = PureBasic 4.51 (Windows - x86)
; CursorPosition = 55
; FirstLine = 11
; Folding = ---
; EnableXP
; EnableUser
; EnableOnError
; EnableCompileCount = 665
; EnableBuildCount = 0
; EnableExeConstant
Code : Tout sélectionner
UsePNGImageEncoder()
Enumeration
#Window_0
EndEnumeration
Global ImageX = 1
Global ImageY = 1
Global LargeurImage = 1600
Global HauteurImage = 1200
Global NombreImage = 350
Global CreationImageThread1 = 0
Global CreationImageThread2 = 0
Global CreationImageThread3 = 0
Global CreationImageThread4 = 0
Global CreationImageThread5 = 0
Global CreationImageThread6 = 0
Global CreationImageThread7 = 0
Global CreationImageThread8 = 0
Global CreationImageThread9 = 0
Global CreationImageThread10 = 0
Global ImageRestante = 0
Global Thread1, Thread2, Thread3, Thread4, Thread5, Thread6, Thread7, Thread8, Thread9, Thread10
Global NombreImageTotaleCree
Global NewList StokageImage()
Global NewList StokageImage1()
Global NewList StokageImage2()
Global NewList StokageImage3()
Global NewList StokageImage4()
Global NewList StokageImage5()
Global NewList StokageImage6()
Global NewList StokageImage7()
Global NewList StokageImage8()
Global NewList StokageImage9()
Global NewList StokageImage10()
Global NewList NumeroImage()
Global NewList NumeroImage1()
Global NewList NumeroImage2()
Global NewList NumeroImage3()
Global NewList NumeroImage4()
Global NewList NumeroImage5()
Global NewList NumeroImage6()
Global NewList NumeroImage7()
Global NewList NumeroImage8()
Global NewList NumeroImage9()
Global NewList NumeroImage10()
Global Semaphore = CreateSemaphore()
SignalSemaphore(Semaphore)
; Procedure PrecalculationTailleImageMemoire(NombreImage, LargeurImage, HauteurImage)
; *MemoireID = AllocateMemory(LargeurImage * HauteurImage * NombreImage)
; If *MemoireID
; Debug "Taille aproximative d'une image = " + StrF(LargeurImage * HauteurImage * 2.512 / 1000 / 1000, 2) + " Mo"
; Debug "Taille Totale aproximative alouer actuellement = " + StrF(LargeurImage * HauteurImage * 2.512 * NombreImage / 1000 / 1000 * NombreImage, 0) + " Mo"
; FreeMemory(*MemoireID)
; Else
; Debug "Impossible d'allouer la mémoire demandée !"
; EndIf
; ProcedureReturn TailleImageMemoire
; EndProcedure
Procedure ComptabilisationImageCree(Image)
NombreImageTotaleCree + Image
ProcedureReturn NombreImageTotaleCree
EndProcedure
Procedure CreationImageThread1(Thread1)
t1 = ElapsedMilliseconds()
For NumeroImageThread1 = 1 To NombreImage / 5
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage1())
StokageImage1() = CreateImage(NumeroImageThread1, LargeurImage ,HauteurImage)
AddElement(NumeroImage1())
NumeroImage1() = NumeroImageThread1
SignalSemaphore(Semaphore)
Thread1 + 1
ImageRestante + 1
Next
t2 = ElapsedMilliseconds()
Debug "Le Thread 1 à mis " + Str(t2 - t1) + " Milisecondes pour crée " + Str(Thread1) + " Images"
CreationImageThread1 = 1
ComptabilisationImageCree(Thread1)
EndProcedure
Procedure CreationImageThread2(Thread2)
t3 = ElapsedMilliseconds()
For NumeroImageThread2 = NombreImage / 5 + 1 To NombreImage / 4
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage2())
StokageImage2() = CreateImage(NumeroImageThread2, LargeurImage ,HauteurImage)
AddElement(NumeroImage2())
NumeroImage2() = NumeroImageThread2
SignalSemaphore(Semaphore)
Thread2 + 1
ImageRestante + 1
Next
t4 = ElapsedMilliseconds()
Debug "Le Thread 2 à mis " + Str(t4 - t3) + " Milisecondes pour crée " + Str(Thread2) + " Images"
CreationImageThread2 = 1
ComptabilisationImageCree(Thread2)
EndProcedure
Procedure CreationImageThread3(Thread3)
t5 = ElapsedMilliseconds()
For NumeroImageThread3 = NombreImage / 4 + 1 To NombreImage / 3
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage3())
StokageImage3() = CreateImage(NumeroImageThread3, LargeurImage ,HauteurImage)
AddElement(NumeroImage3())
NumeroImage3() = NumeroImageThread3
SignalSemaphore(Semaphore)
Thread3 + 1
ImageRestante + 1
Next
t6 = ElapsedMilliseconds()
Debug "Le Thread 3 à mis " + Str(t6 - t5) + " Milisecondes pour crée " + Str(Thread3) + " Images"
CreationImageThread3 = 1
ComptabilisationImageCree(Thread3)
EndProcedure
Procedure CreationImageThread4(Thread4)
t7 = ElapsedMilliseconds()
For NumeroImageThread4 = NombreImage / 3 + 1 To NombreImage / 2
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage4())
StokageImage4() = CreateImage(NumeroImageThread4, LargeurImage ,HauteurImage)
AddElement(NumeroImage4())
NumeroImage4() = NumeroImageThread4
SignalSemaphore(Semaphore)
Thread4 + 1
ImageRestante + 1
Next
t8 = ElapsedMilliseconds()
Debug "Le Thread 4 à mis " + Str(t8 - t7) + " Milisecondes pour crée " + Str(Thread4) + " Images"
CreationImageThread4 = 1
ComptabilisationImageCree(Thread4)
EndProcedure
Procedure CreationImageThread5(Thread5)
t9 = ElapsedMilliseconds()
For NumeroImageThread5 = NombreImage / 4 + 1 To NombreImage
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage5())
StokageImage5() = CreateImage(NumeroImageThread5, LargeurImage ,HauteurImage)
AddElement(NumeroImage5())
NumeroImage5() = NumeroImageThread5
SignalSemaphore(Semaphore)
Thread5 + 1
ImageRestante + 1
Next
t10 = ElapsedMilliseconds()
Debug "Le Thread 5 à mis " + Str(t10 - t9) + " Milisecondes pour crée " + Str(Thread5) + " Images"
CreationImageThread5 = 1
ComptabilisationImageCree(Thread5)
EndProcedure
Procedure ImpressionImage(ImageX ,ImageY ,LargeurImage ,HauteurImage)
t5 = ElapsedMilliseconds()
FirstElement(NumeroImage())
ForEach StokageImage()
;Debug NumeroImage()
DrawingImage = StartDrawing(ImageOutput(NumeroImage()))
GetDC_Image1 = GetDC_(GetDesktopWindow_())
BitBlt_(DrawingImage, 0, 0, LargeurImage ,HauteurImage, GetDC_Image1, ImageX, ImageY, #SRCCOPY)
ReleaseDC_(GetDesktopWindow_(), GetDC_Image1)
StopDrawing()
NextElement(NumeroImage())
Next
t6 = ElapsedMilliseconds()
Debug "Temps Impression Image = " + Str(t6 - t5)
CreationImageThread4 = 1
EndProcedure
Procedure EnregistrementImage()
t1 = ElapsedMilliseconds()
FirstElement(NumeroImage())
ForEach StokageImage()
a + 1
SaveImage(NumeroImage(), "Image n°" + Str(a) + ".Png", #PB_ImagePlugin_PNG)
NextElement(NumeroImage())
Next
t2 = ElapsedMilliseconds()
Debug "Temps Enregistrement Image = " + Str(t2 - t1)
EndProcedure
;PrecalculationTailleImageMemoire(NombreImage, LargeurImage, HauteurImage)
CreateThread(@CreationImageThread1(), 0)
CreateThread(@CreationImageThread2(), 0)
CreateThread(@CreationImageThread3(), 0)
CreateThread(@CreationImageThread4(), 0)
CreateThread(@CreationImageThread5(), 0)
Repeat
Delay(1)
Until CreationImageThread1 = 1 And CreationImageThread2 = 1 And CreationImageThread3 = 1 And CreationImageThread4 = 1 And CreationImageThread5 = 1
Debug "Nombre d'image totale crée: " + Str(NombreImageTotaleCree)
ForEach StokageImage1()
AddElement(StokageImage())
StokageImage() = StokageImage1()
Next
ForEach StokageImage2()
AddElement(StokageImage())
StokageImage() = StokageImage2()
Next
ForEach StokageImage3()
AddElement(StokageImage())
StokageImage() = StokageImage3()
Next
ForEach StokageImage4()
AddElement(StokageImage())
StokageImage() = StokageImage4()
Next
ForEach StokageImage5()
AddElement(StokageImage())
StokageImage() = StokageImage5()
Next
;ImpressionImage(ImageX ,ImageY ,LargeurImage ,HauteurImage)
;EnregistrementImage()
; IDE Options = PureBasic 4.51 (Windows - x86)
; CursorPosition = 245
; FirstLine = 202
; Folding = --
; EnableXP
; EnableUser
; EnableOnError
; EnableCompileCount = 670
; EnableBuildCount = 0
; EnableExeConstant
Code : Tout sélectionner
UsePNGImageEncoder()
Enumeration
#Window_0
EndEnumeration
Global ImageX = 1
Global ImageY = 1
Global LargeurImage = 1600
Global HauteurImage = 1200
Global NombreImage = 350
Global CreationImageThread1 = 0
Global CreationImageThread2 = 0
Global CreationImageThread3 = 0
Global CreationImageThread4 = 0
Global ImageRestante = 0
Global Thread1, Thread2, Thread3, Thread4
Global NombreImageTotaleCree
Global NewList StokageImage()
Global NewList StokageImage1()
Global NewList StokageImage2()
Global NewList StokageImage3()
Global NewList StokageImage4()
Global NewList NumeroImage()
Global NewList NumeroImage1()
Global NewList NumeroImage2()
Global NewList NumeroImage3()
Global NewList NumeroImage4()
Global Semaphore = CreateSemaphore()
SignalSemaphore(Semaphore)
; Procedure PrecalculationTailleImageMemoire(NombreImage, LargeurImage, HauteurImage)
; *MemoireID = AllocateMemory(LargeurImage * HauteurImage * NombreImage)
; If *MemoireID
; Debug "Taille aproximative d'une image = " + StrF(LargeurImage * HauteurImage * 2.512 / 1000 / 1000, 2) + " Mo"
; Debug "Taille Totale aproximative alouer actuellement = " + StrF(LargeurImage * HauteurImage * 2.512 * NombreImage / 1000 / 1000 * NombreImage, 0) + " Mo"
; FreeMemory(*MemoireID)
; Else
; Debug "Impossible d'allouer la mémoire demandée !"
; EndIf
; ProcedureReturn TailleImageMemoire
; EndProcedure
Procedure ComptabilisationImageCree(Image)
NombreImageTotaleCree + Image
ProcedureReturn NombreImageTotaleCree
EndProcedure
Procedure CreationImageThread1(Thread1)
t1 = ElapsedMilliseconds()
For NumeroImageThread1 = 1 To NombreImage / 4
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage1())
StokageImage1() = CreateImage(NumeroImageThread1, LargeurImage ,HauteurImage)
AddElement(NumeroImage1())
NumeroImage1() = NumeroImageThread1
SignalSemaphore(Semaphore)
Thread1 + 1
ImageRestante + 1
Next
t2 = ElapsedMilliseconds()
Debug "Le Thread 1 à mis " + Str(t2 - t1) + " Milisecondes pour crée " + Str(Thread1) + " Images"
CreationImageThread1 = 1
ComptabilisationImageCree(Thread1)
EndProcedure
Procedure CreationImageThread2(Thread2)
t3 = ElapsedMilliseconds()
For NumeroImageThread2 = NombreImage / 4 + 1 To NombreImage / 2
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage2())
StokageImage2() = CreateImage(NumeroImageThread2, LargeurImage ,HauteurImage)
AddElement(NumeroImage2())
NumeroImage2() = NumeroImageThread2
SignalSemaphore(Semaphore)
Thread2 + 1
ImageRestante + 1
Next
t4 = ElapsedMilliseconds()
Debug "Le Thread 2 à mis " + Str(t4 - t3) + " Milisecondes pour crée " + Str(Thread2) + " Images"
CreationImageThread2 = 1
ComptabilisationImageCree(Thread2)
EndProcedure
Procedure CreationImageThread3(Thread3)
t5 = ElapsedMilliseconds()
For NumeroImageThread3 = NombreImage / 2 + 1 To (NombreImage / 4) * 3
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage3())
StokageImage3() = CreateImage(NumeroImageThread3, LargeurImage ,HauteurImage)
AddElement(NumeroImage3())
NumeroImage3() = NumeroImageThread3
SignalSemaphore(Semaphore)
Thread3 + 1
ImageRestante + 1
Next
t6 = ElapsedMilliseconds()
Debug "Le Thread 3 à mis " + Str(t6 - t5) + " Milisecondes pour crée " + Str(Thread3) + " Images"
CreationImageThread3 = 1
ComptabilisationImageCree(Thread3)
EndProcedure
Procedure CreationImageThread4(Thread4)
t7 = ElapsedMilliseconds()
For NumeroImageThread4 = (NombreImage / 4) * 3 + 1 To NombreImage
If ImageRestante => NombreImage
Break
EndIf
WaitSemaphore(Semaphore)
AddElement(StokageImage4())
StokageImage4() = CreateImage(NumeroImageThread4, LargeurImage ,HauteurImage)
AddElement(NumeroImage4())
NumeroImage4() = NumeroImageThread4
SignalSemaphore(Semaphore)
Thread4 + 1
ImageRestante + 1
Next
t8 = ElapsedMilliseconds()
Debug "Le Thread 4 à mis " + Str(t8 - t7) + " Milisecondes pour crée " + Str(Thread4) + " Images"
CreationImageThread4 = 1
ComptabilisationImageCree(Thread4)
EndProcedure
Procedure ImpressionImage(ImageX ,ImageY ,LargeurImage ,HauteurImage)
t5 = ElapsedMilliseconds()
FirstElement(NumeroImage())
ForEach StokageImage()
;Debug NumeroImage()
DrawingImage = StartDrawing(ImageOutput(NumeroImage()))
GetDC_Image1 = GetDC_(GetDesktopWindow_())
BitBlt_(DrawingImage, 0, 0, LargeurImage ,HauteurImage, GetDC_Image1, ImageX, ImageY, #SRCCOPY)
ReleaseDC_(GetDesktopWindow_(), GetDC_Image1)
StopDrawing()
NextElement(NumeroImage())
Next
t6 = ElapsedMilliseconds()
Debug "Temps Impression Image = " + Str(t6 - t5)
CreationImageThread4 = 1
EndProcedure
Procedure EnregistrementImage()
t1 = ElapsedMilliseconds()
FirstElement(NumeroImage())
ForEach StokageImage()
a + 1
SaveImage(NumeroImage(), "Image n°" + Str(a) + ".Png", #PB_ImagePlugin_PNG)
NextElement(NumeroImage())
Next
t2 = ElapsedMilliseconds()
Debug "Temps Enregistrement Image = " + Str(t2 - t1)
EndProcedure
;PrecalculationTailleImageMemoire(NombreImage, LargeurImage, HauteurImage)
CreateThread(@CreationImageThread1(), 0)
CreateThread(@CreationImageThread2(), 0)
CreateThread(@CreationImageThread3(), 0)
CreateThread(@CreationImageThread4(), 0)
Repeat
Delay(1)
Until CreationImageThread1 = 1 And CreationImageThread2 = 1 And CreationImageThread3 = 1 And CreationImageThread4 = 1
Debug "Nombre d'image totale crée: " + Str(NombreImageTotaleCree)
ForEach StokageImage1()
AddElement(StokageImage())
StokageImage() = StokageImage1()
Next
ForEach StokageImage2()
AddElement(StokageImage())
StokageImage() = StokageImage2()
Next
ForEach StokageImage3()
AddElement(StokageImage())
StokageImage() = StokageImage3()
Next
ForEach StokageImage4()
AddElement(StokageImage())
StokageImage() = StokageImage4()
Next
ForEach NumeroImage1()
AddElement(NumeroImage())
NumeroImage() = NumeroImage1()
Next
ForEach NumeroImage2()
AddElement(NumeroImage())
NumeroImage() = NumeroImage2()
Next
ForEach NumeroImage3()
AddElement(NumeroImage())
NumeroImage() = NumeroImage3()
Next
ForEach NumeroImage4()
AddElement(NumeroImage())
NumeroImage() = NumeroImage4()
Next
;ImpressionImage(ImageX ,ImageY ,LargeurImage ,HauteurImage)
;EnregistrementImage()
; IDE Options = PureBasic 4.51 (Windows - x86)
; CursorPosition = 15
; Folding = --
; EnableXP
; EnableUser
; EnableOnError
; EnableCompileCount = 683
; EnableBuildCount = 0
; EnableExeConstant