mais je rencontre des soucis
Le programme lit une image, la reproduis sur une fenêtre et génère un code
en hexadécimale
Ensuite j’avais dans l'idée de convertir ce code en caractère unique (j'ai prix chinois car les caractère mon plus)
en gros j'explique le principe:
lecture du pixel de l'image, reproduction du pixel sur une fenêtre et génération du code hexadécimale, disons plutôt conversion de la couleur lut du pixel en hexadécimale
chaque pixel est fait de cette façon, a la fin le programme enregistre le code générer dans un fichier texte
Le but aurais été ensuite de reconvertir le code (la couleur hexadécimale) en caractère chinois mais j'ai des soucis pour
lire le fichier ou sont les caractère (table de caractère), le programme ne reconnais pas les caractère
mais pourtant je lui est dit de lire le fichier en mode Unicode
Bon en gros quand il a convertit la couleur en hexadécimale, il doit ouvrir le fichier (fait préalablement pour pas le refaire a chaque fois)
puis il cherche dans le fichier la couleur qui correspond, ensuite il reconvertit donc cette couleur avec le caractère chinois
Exemple:
Lecture d'un pixel >> D5 (couleur converti en hexadécimale)
Recherche de la couleur dans le fichier et conversion de celle-ci >> D5 = 蔔
Etc.
je ne sais pas si j'ai été asses clair mais j'ai fait ce que j'ai pue

En gros c'est pour faire un algorithme de compression
Je ne sais pas trop ou je vais mais je fait quand même

Code : Tout sélectionner
#ImageLecture = 1
#ImageEcriture = 2
UsePNGImageDecoder()
UseJPEGImageDecoder()
Global NewList CreationCodeImage.s()
; Procedure de chargement d'une image
Procedure ChargementImage()
Chargement_Image:
Filtre$ = "Image Bmp (*.Bmp)|*.Bmp|Image Png (*.Png)|*.Png|Image Jpg (*.Jpg)|*.Jpg"
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$), ".jpg", 1)
; Ok
Else
MessageRequester("Fichier invalide !", " Veuillez choisir un fichier d'image valide !", 48)
ProcedureReturn 0
EndIf
If LoadImage(#ImageLecture, FichierImage$)
; Ok
Else
MessageRequester("Erreur de chargement !", " Impossible de charger le fichier " + Chr(34) + GetFilePart(FichierImage$) + Chr(34) + " !", 16)
ProcedureReturn 0
EndIf
Else
EndIf
ProcedureReturn 1
EndProcedure
Procedure CompressionCodeImage(CodeImage$)
If ReadFile(1, "Table de caractères de 1 octets.txt") ; Si le fichier peut être lu , on continue...
While Eof(1) = 0 ; Boucle tant que la fin du fichier n'est pas atteinte. (Eof = 'End Of File')
Ligne$ = ReadString(1, #PB_Unicode)
PositionExtraction = FindString(Ligne$, "=", 1) + 2
Caractere$ = Mid(Ligne$, PositionExtraction, 1) ; Affiche ligne par ligne le contenu du fichier
Debug Ligne$
Wend
CloseFile(1) ; Ferme le fichier précédemment ouvert
Else ; Sinon ont affiche un message d'avertissement
MessageRequester("Information", "Impossible d'ouvrir le fichier !")
EndIf
EndProcedure
Procedure CreationImage()
Enumeration
#Fenetre
#ImageGadget
EndEnumeration
If OpenWindow(#Fenetre, 439, 170, 600, 300, "Fenêtre", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
ImageGadget(#ImageGadget, 1, 1, 100, 100, ImageID(#ImageEcriture))
Repeat ; Start of the event loop
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
EventMenu = EventMenu() ; The event Menu
SetGadgetState(#ImageGadget, ImageID(#ImageEcriture))
If Event = #PB_Event_Gadget
If GadgetID = 0
ElseIf GadgetID = 0
ElseIf GadgetID = 0
EndIf
ElseIf Event = #PB_Event_Menu
If EventMenu = 0
ElseIf EventMenu = 0
ElseIf EventMenu = 0
EndIf
EndIf
Until Event = #PB_Event_CloseWindow ; End of the event loop
EndIf
EndProcedure
; Lecture de l'image entière
Procedure LectureImage()
CreateImage(#ImageEcriture, 6500, 4200)
If IsImage(#ImageLecture) And IsImage(#ImageEcriture) ; Si les images sont initialisée
; Calcule de la taille de l'image
LargeurImage = ImageWidth(#ImageLecture)
HauteurImage = ImageHeight(#ImageLecture)
X = -1
Y = 0
; Ont répète jusqu'a ce que tous les pixels de l'image soit lue
For LectureImage = 1 To LargeurImage * HauteurImage
; Si ont est arriver a la fin de la ligne de l'image et qu'ont n'est pas sur la dernière ligne de celle-ci
If X = LargeurImage - 1 And Y < HauteurImage
Y + 1 ; Ont va a la ligne suivente
X = 0 ; Ont réinitialise la variable X avec la valeur 0 pour pouvoir lire la ligne suivente a partir du pixel 1
; Sinon si ont est arriver a la fin de la ligne de l'image et qu'ont n'est sur la dernière ligne de celle-ci
ElseIf X = LargeurImage And Y = HauteurImage
Break ; Ont sort de la boucle puisque ont a terminer la lecture de l'image
Else
X + 1 ; Sinon si ont est pas arriver a la fin de la ligne de l'image, ont lit le prochain pixel de la ligne de celle-ci
EndIf
StartDrawing(ImageOutput(#ImageLecture))
CouleurPixel = Point(X, Y) ; Ont lit la couleur du pixel lue actuellement
StopDrawing()
AddElement(CreationCodeImage())
CreationCodeImage() = RSet(Hex(CouleurPixel), 2, "0")
StartDrawing(ImageOutput(#ImageEcriture))
Plot(X, Y, CouleurPixel) ; Ont déssine le pixel qu'ont viens de lire sur la seconde image
StopDrawing()
Next
EndIf
OpenFile(99, "abc.txt")
ForEach CreationCodeImage()
WriteString(99, CreationCodeImage())
Next
CloseFile(99)
CreationImage()
EndProcedure
; Repète jusqu'a ce qu'un fichier soit charger correctement ou que le bouton Annuler soit appuiyer
Repeat
Until ChargementImage() = 1
CompressionCodeImage(CodeImage$)
LectureImage()
; Question
; Pourquoi les oppérations de déssins sur une surface de déssins commence a 0 pixel en X et Y ?
; Je trouce ça complètement ilogique, ça ma causer d'ailleur quelques tor !