Bien voilà, je rencontre un petit problème gênant
Je lit une image avec Point(), Cependant plus l'image est grande et plus c'est long, normale me direz-vous !
Alors je décide de découper l'image en 4 sous image en me disant que si je lit chacune d'elle
en même temps grâce a des thread, sa ira bien plus vide mais StartDrawing ne peut pas le faire
car il ne peut faire qu'une seule opération a la fois sur une surface et il est là le problème
car si je pouvais faire StartDrawing avec point() en même temps sur chacune des images
ça irais bien plus vite !
J'ai été asses clair ?
Bref j'ai commencer ceci qui fonctionne très bien
une procédure pour 1 image (4 au totale) car sa va un peut plus vite comme ça
que si c'étais une seule image car j'ai essayer avec des thread grâce des sémaphores
mais c'est pas bien, trop lent, il s'emmêle les pinceaux
Code : Tout sélectionner
Enumeration 1
#Image
#Image1
#Image2
#Image3
#Image4
EndEnumeration
Global NewList CouleurImage.l()
Global LargeurImage
Global HauteurImage
Enumeration 10
#Fenetre
EndEnumeration
Procedure Fenetre()
If OpenWindow(#Fenetre, 327, 177, 500, 300, "Fenêtre windows", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_ScreenCentered | #PB_Window_TitleBar | #PB_Window_SizeGadget)
Shared LargeurImage1, HauteurImage1
If IsImage(#Image1)
ImageGadget(11, 10, 10, 1, 1, ImageID(#Image1))
ImageGadget(12, 10 + LargeurImage1, 10, 1, 1, ImageID(#Image2))
ImageGadget(13, 10, 10 + HauteurImage1, 1, 1, ImageID(#Image3))
ImageGadget(14, 10 + LargeurImage1, 10 + HauteurImage1, 1, 1, ImageID(#Image4))
EndIf
Repeat ; Départ des évènements de boucle
Event = WaitWindowEvent(1) ; Cette ligne attend pendent (Minuteur) qu'un évènement soit recus par la fenêtre
Until Event = #PB_Event_CloseWindow ; Fin des évènements de boucle
EndIf
EndProcedure
; Procedure de chargement d'une image
Procedure.l ChargementImage(NumeroImage)
UsePNGImageDecoder()
Chargement_Image:
Filtre$ = "Image Bmp (*.Bmp)|*.Bmp|Image Png (*.Png)|*.Png|Image Jpeg (*.Jpeg)|*.Jpeg"
FichierImage$ = OpenFileRequester("Choisissez un fichier à charger", GetHomeDirectory() + "Bureau\", Filtre$, 0)
If FichierImage$
If FindString(GetFilePart(FichierImage$), ".bmp", 1) Or FindString(GetFilePart(FichierImage$), ".png", 1) Or FindString(GetFilePart(FichierImage$), ".jpeg", 1)
; Ok
Else
MessageRequester("Fichier invalide !", " Veuillez choisir un fichier d'image invalide !", 48)
ProcedureReturn 0
EndIf
If LoadImage(NumeroImage, FichierImage$) <> 0
ProcedureReturn LoadImage(NumeroImage, FichierImage$)
Else
MessageRequester("Erreur de chargement !", " Impossible de charger le fichier " + Chr(34) + GetFilePart(FichierImage$) + Chr(34) + " !", 16)
ProcedureReturn 0
EndIf
EndIf
ProcedureReturn 0
EndProcedure
Procedure TraitementImage1()
Shared LargeurImage1, HauteurImage1, LargeurImage2, HauteurImage2, ProfondeurImage
GrabImage(#Image, #Image1, 0, 0, LargeurImage1, HauteurImage1)
StartDrawing(ImageOutput(#Image1))
DrawingMode(#PB_2DDrawing_AlphaBlend)
X1 = 0
Y1 = 0
Repeat
AddElement(CouleurImage())
CouleurImage() = Point(X1, Y1)
If X1 <> LargeurImage1 - 1
X1 + 1
Else
X1 = 0
Y1 + 1
EndIf
Until X1 = LargeurImage1 - 1 And Y1 = HauteurImage1 - 1
StopDrawing()
EndProcedure
Procedure TraitementImage2()
Shared LargeurImage1, HauteurImage1, LargeurImage2, HauteurImage2, ProfondeurImage
GrabImage(#Image, #Image2, LargeurImage1, 0, LargeurImage2, HauteurImage1)
StartDrawing(ImageOutput(#Image2))
DrawingMode(#PB_2DDrawing_AlphaBlend)
X2 = 0
Y2 = 0
Repeat
AddElement(CouleurImage())
CouleurImage() = Point(X2, Y2)
If X2 <> LargeurImage2 - 1
X2 + 1
Else
X2 = 0
Y2 + 1
EndIf
Until X2 = LargeurImage2 - 1 And Y2 = HauteurImage1 - 1
StopDrawing()
EndProcedure
Procedure TraitementImage3()
Shared LargeurImage1, HauteurImage1, LargeurImage2, HauteurImage2, ProfondeurImage
GrabImage(#Image, #Image3, 0, HauteurImage2, LargeurImage1, HauteurImage2)
StartDrawing(ImageOutput(#Image3))
DrawingMode(#PB_2DDrawing_AlphaBlend)
X3 = 0
Y3 = 0
Repeat
AddElement(CouleurImage())
CouleurImage() = Point(X3, Y3)
If X3 <> LargeurImage1 - 1
X3 + 1
Else
X3 = 0
Y3 + 1
EndIf
Until X3 = LargeurImage1 - 1 And Y3 = HauteurImage2 - 1
StopDrawing()
EndProcedure
Procedure TraitementImage4()
Shared LargeurImage1, HauteurImage1, LargeurImage2, HauteurImage2, ProfondeurImage
GrabImage(#Image, #Image4, LargeurImage1, HauteurImage2, LargeurImage2, HauteurImage2)
StartDrawing(ImageOutput(#Image4))
DrawingMode(#PB_2DDrawing_AlphaBlend)
X4 = 0
Y4 = 0
Repeat
AddElement(CouleurImage())
CouleurImage() = Point(X4, Y4)
If X4 <> LargeurImage2 - 1
X4 + 1
Else
X4 = 0
Y4 + 1
EndIf
Until X4 = LargeurImage2 - 1 And Y4 = HauteurImage2 - 1
StopDrawing()
EndProcedure
Procedure CouleurPlusUtiliser()
EndProcedure
Procedure CouleurMoinsUtiliser()
EndProcedure
; Procedure pour inspecter l'image
Procedure AnalyseImage()
Shared LargeurImage1, HauteurImage1, LargeurImage2, HauteurImage2, ProfondeurImage
If IsImage(#Image)
Debug "------------------------------------------------------------------------------------------------------------------"
Debug "Largeur de l'image = " + Str(LargeurImage)
Debug "Hauteur de l'image = " + Str(HauteurImage)
Debug "Nombre de pixel de l'image: " + Str(LargeurImage * HauteurImage)
Debug "Profondeur de l'image = " + Str(ProfondeurImage) + " Bit"
Debug "------------------------------------------------------------------------------------------------------------------"
Debug "Découpage de l'image principale en 4 sous image..."
Debug ""
TI1 = ElapsedMilliseconds()
TraitementImage1()
TI2 = ElapsedMilliseconds()
Debug "Dimention de l'mage 1: Largeur = " + Str(LargeurImage1) + ", Hauteur = " + Str(HauteurImage1)
Debug "Temps de traitement de l'image 1: " + Str(TI2 - TI1) + " MilliSecondes"
Debug ""
TI3 = ElapsedMilliseconds()
TraitementImage2()
TI4 = ElapsedMilliseconds()
Debug "Dimention de l'mage 2: Largeur = " + Str(LargeurImage2) + ", Hauteur = " + Str(HauteurImage1)
Debug "Temps de traitement de l'image 2: " + Str(TI4 - TI3) + " MilliSecondes"
Debug ""
TI5 = ElapsedMilliseconds()
TraitementImage3()
TI6 = ElapsedMilliseconds()
Debug "Dimention de l'mage 3: Largeur = " + Str(LargeurImage1) + ", Hauteur = " + Str(HauteurImage2)
Debug "Temps de traitement de l'image 3: " + Str(TI6 - TI5) + " MilliSecondes"
Debug ""
TI7 = ElapsedMilliseconds()
TraitementImage4()
TI8 = ElapsedMilliseconds()
Debug "Dimention de l'mage 4: Largeur = " + Str(LargeurImage2) + ", Hauteur = " + Str(HauteurImage2)
Debug "Temps de traitement de l'image 4: " + Str(TI8 - TI7) + " MilliSecondes"
Debug "------------------------------------------------------------------------------------------------------------------"
TempsTotaleAnalyse = TI2 - TI1 + TI4 - TI3 + TI6 - TI5 + TI8 - TI7
Debug "Temps moyen de traitement: " + Str(TempsTotaleAnalyse / 4) + " MilliSecondes"
Debug "Temps totale de traitement des 4 image: " + Str(TempsTotaleAnalyse) + " MilliSecondes"
Debug "------------------------------------------------------------------------------------------------------------------"
Debug "Trie de la liste en court..."
EndIf
TT1 = ElapsedMilliseconds()
SortList(CouleurImage(), #PB_Sort_Descending)
TT2 = ElapsedMilliseconds()
TempsTrie = TT2 - TT1
TempsTotale = TempsTotaleAnalyse + TempsTrie
Debug "Temps de trie de la liste de couleur: " + Str(TempsTrie) + " MilliSecondes"
Debug "------------------------------------------------------------------------------------------------------------------"
Debug "Temps de traitement totale: " + Str(TempsTotale) + " MilliSecondes"
Debug "------------------------------------------------------------------------------------------------------------------"
EndProcedure
If ChargementImage(#Image)
ProfondeurImage = ImageDepth(#Image, #PB_Image_OriginalDepth)
LargeurImage = ImageWidth(#Image)
HauteurImage = ImageHeight(#Image)
LargeurImage1 = Round(LargeurImage / 2, #PB_Round_Down)
LargeurImage2 = Round(LargeurImage / 2, #PB_Round_Up)
HauteurImage1 = Round(HauteurImage / 2, #PB_Round_Down)
HauteurImage2 = Round(HauteurImage / 2, #PB_Round_Up)
AnalyseImage()
Fenetre()
EndIf