
<Convertion image/Data>
<Convertion image/Data>
Bonjours, pouvez vous me dire SVP comment convertir une image ou îcone en Data pour que ça puisse rentrer dans une DataSection ?, merci à tous! 

Salut , c'est du 3.94 je crois. a modifier surement.
@++
@++
Code : Tout sélectionner
; code by Dobro
Declare SetStringManipulationBufferSize(Bytes)
SetStringManipulationBufferSize(1048576)
If OpenWindow(1, 0, 0, 200, 50, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget , "")
NomFichier$ = OpenFileRequester("dobro_datagenerator", "c:\", "Fichiers image|*.bmp", 0 )
If LoadImage(0, NomFichier$)
Hauteur = ImageHeight()
Largeur = ImageWidth()
num=CreateFile(#PB_Any,"data.pb") :; ceci ecrit le fichier pb (txt) pour etre charge dans l'editeur !!
WriteStringN("; codé Par Dobro img to data"):; ecrit la premiere ligne de code
WriteStringN("Declare WindowCallback(WindowID,message,wParam,lParam)")
WriteStringN("largeur="+Str(Largeur)):; ecrit la variable
WriteStringN("hauteur="+Str(Hauteur))
WriteStringN("CreateImage(1, Largeur, Hauteur)")
WriteStringN("For i = 0 To Largeur -1")
WriteStringN(" For j = 0 To Hauteur -1 ")
WriteStringN(" Read a.l ")
WriteStringN(" If StartDrawing(ImageOutput())")
WriteStringN(" Plot(i,j,a.l) ")
WriteStringN(" StopDrawing() ")
WriteStringN(" EndIf")
WriteStringN(" Next j")
WriteStringN("Next i")
WriteStringN(" titre$="+Chr($22)+NomFichier$+Chr($22))
; dessous: genere le code qui permet de relire les datas !!
; ouaaa du code qui s'autoecrit !!! :-D
WriteStringN("If OpenWindow (1, 0, 0, Largeur, Hauteur, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget,titre$)")
WriteStringN(" SetWindowCallback(@WindowCallback()) ")
WriteStringN(" If StartDrawing(WindowOutput())")
WriteStringN(" DrawImage(UseImage(1), 0, 0) ")
WriteStringN(" StopDrawing() ")
WriteStringN(" EndIf")
WriteStringN(" Repeat")
WriteStringN(" Until WaitWindowEvent()= #PB_EventCloseWindow")
WriteStringN("EndIf ")
WriteStringN("End ")
WriteStringN("Procedure WindowCallback(WindowID,message,wParam,lParam)")
WriteStringN(" res=#PB_ProcessPureBasicEvents")
WriteStringN(" Select message ")
WriteStringN(" Case #WM_PAINT")
WriteStringN(" StartDrawing(WindowOutput())")
WriteStringN(" DrawImage(UseImage(1), 0, 0) ")
WriteStringN(" StopDrawing() ")
WriteStringN(" ProcedureReturn #True ")
WriteStringN(" EndSelect")
WriteStringN(" ProcedureReturn res")
WriteStringN("EndProcedure ")
;************************
Resultat = StartDrawing(WindowOutput())
DrawText("encodage en cours "+Chr(10)+" attendre la fermeture de cette fenetre")
StopDrawing()
WriteStringN("DataSection") :; commence la section des data
For i =0 To Largeur -1
ligne.s="data.l " ; insere la fonction data.l avant les valeurs
For j = 0 To Hauteur-1
StartDrawing(ImageOutput() )
ligne.s=ligne.s+Str(Point(i, j))+",":; met des virgules entre les datas
StopDrawing()
Next j
ligne.s=Left(ligne.s, Len(ligne.s)-1) :; retire la derniere virgule de la ligne
WriteStringN(ligne.s):; ecrit une ligne entiere de data
Next i
WriteStringN(" "):; saute une ligne vide
WriteStringN("EndDataSection") :;ecrit la fin de section data
CloseFile(num)
EndIf
CloseWindow(0)
EndIf
End
Procedure SetStringManipulationBufferSize(Bytes)
PBStringBase.l = 0
PBMemoryBase.l = 0
!MOV eax, dword [PB_StringBase]
!MOV [esp+4],eax
!MOV eax, dword [PB_MemoryBase]
!MOV [esp+8],eax
HeapReAlloc_(PBMemoryBase, #GMEM_ZEROINIT, PBStringBase, Bytes)
!MOV dword [_PB_StringBase],eax
EndProcedure
Moi aussi c'est pour la 3.94
Code : Tout sélectionner
FileIn.s=OpenFileRequester("Convert to Data.b","C:\","All|*.*",0)
If FileIn="":End:EndIf
FileOut.s="C:\Out.txt"
#In=0
#Out=1
OpenFile(#In,FileIn)
CreateFile(#Out,FileOut)
UseFile(#Out)
WriteString("DataSection"+#CRLF$+"Data.b ")
Repeat
UseFile(#In)
FileSeek(index)
If Eof(#In)
Break
Else
If index>0
UseFile(#Out)
WriteString(",")
EndIf
EndIf
UseFile(#In)
Byte=ReadByte()
UseFile(#Out)
WriteString(Str(Byte))
index+1
ForEver
;/ Add 'EndDataSection' and close all files
UseFile(#Out)
WriteString(#CRLF$+"EndDataSection"+#CRLF$)
CloseFile(#Out)
CloseFile(#In)
voici mon convertisseur mis a jour a la version 4.00
rappel du fonctionnement
lance le prg , choisi une image "BMP"
le convertiseur va generé un prg purebasic avec le nom de "Data.pb"
ce petit prg generé ("Data.pb") va charger l'image qui a ete mis au format DATA
bref ce petit prg("Data.pb") est l'image au format DATA et son loader integré
rappel du fonctionnement
lance le prg , choisi une image "BMP"
le convertiseur va generé un prg purebasic avec le nom de "Data.pb"
ce petit prg generé ("Data.pb") va charger l'image qui a ete mis au format DATA
bref ce petit prg("Data.pb") est l'image au format DATA et son loader integré

Code : Tout sélectionner
; code by Dobro
If OpenWindow(1, 0, 0, 200, 50, "", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
NomFichier$ = OpenFileRequester("dobro_datagenerator", "c:\", "Fichiers image|*.bmp", 0 )
If LoadImage(0, NomFichier$)
Hauteur = ImageHeight(0)
Largeur = ImageWidth(0)
num=CreateFile(#PB_Any,"data.pb") :; ceci ecrit le fichier pb (txt) pour etre charge dans l'editeur !!
WriteStringN(num,"; codé Par Dobro img to data")
WriteStringN(num,"Declare WindowCallback(WindowID,message,wParam,lParam)")
WriteStringN(num,"Largeur=80")
WriteStringN(num,"Hauteur=144")
WriteStringN(num,"CreateImage(1, Largeur, Hauteur)")
WriteStringN(num,"For i = 0 To Largeur -1")
WriteStringN(num,"For j = 0 To Hauteur -1 ")
WriteStringN(num," Read a.l ")
WriteStringN(num,"If StartDrawing(ImageOutput(1))")
WriteStringN(num," Plot(i,j,a.l) ")
WriteStringN(num," StopDrawing() ")
WriteStringN(num,"EndIf")
WriteStringN(num,"Next j")
WriteStringN(num,"Next i")
WriteStringN(num," titre$="+Chr($22)+NomFichier$+Chr($22))
; dessous: genere le code qui permet de relire les datas !!
; ouaaa du code qui s'autoecrit !!! :-D
WriteStringN(num,"If OpenWindow (1, 0, 0, Largeur, Hauteur,titre$,#PB_Window_SystemMenu | #PB_Window_MinimizeGadget)")
WriteStringN(num,"SetWindowCallback(@WindowCallback()) ")
WriteStringN(num," If StartDrawing(WindowOutput(1))")
WriteStringN(num," DrawImage(ImageID(1), 0, 0) ")
WriteStringN(num," StopDrawing() ")
WriteStringN(num," EndIf")
WriteStringN(num," Repeat")
WriteStringN(num," Until WaitWindowEvent()= #PB_Event_CloseWindow")
WriteStringN(num,"EndIf ")
WriteStringN(num,"End ")
WriteStringN(num,"Procedure WindowCallback(WindowID,message,wParam,lParam)")
WriteStringN(num," res=#PB_ProcessPureBasicEvents")
WriteStringN(num," Select message ")
WriteStringN(num," Case #WM_PAINT")
WriteStringN(num," StartDrawing(WindowOutput(1))")
WriteStringN(num," DrawImage(ImageID(1), 0, 0) ")
WriteStringN(num," StopDrawing() ")
WriteStringN(num," ProcedureReturn #True ")
WriteStringN(num," EndSelect")
WriteStringN(num," ProcedureReturn res")
WriteStringN(num,"EndProcedure ")
;************************
Resultat = StartDrawing(WindowOutput(1))
DrawText(0,0,"encodage en cours "+Chr(10)+" attendre la fermeture de cette fenetre")
StopDrawing()
WriteStringN(num,"DataSection") :; commence la section des data
For i =0 To Largeur -1
ligne.s="data.l " ; insere la fonction data.l avant les valeurs
For j = 0 To Hauteur-1
StartDrawing(ImageOutput(0) )
ligne.s=ligne.s+Str(Point(i, j))+",":; met des virgules entre les datas
StopDrawing()
Next j
ligne.s=Left(ligne.s, Len(ligne.s)-1) :; retire la derniere virgule de la ligne
WriteStringN(num,ligne.s):; ecrit une ligne entiere de data
Next i
WriteStringN(num," "):; saute une ligne vide
WriteStringN(num,"EndDataSection") :;ecrit la fin de section data
CloseFile(num)
EndIf
CloseWindow(1)
EndIf
End
c'est pas marrant, dès qu'on demande un truc, on a une réponse et plusieurs programmes déja tout fait 

Quelques manoucheries : I can't give you anything but love / Stompin' at decca
-
- Messages : 58
- Inscription : jeu. 22/déc./2005 11:23
Bonjour DOBRO
Comme dab un super code.
Tu va pas y croire mais je cherchais ça aussi.
Tu va me dire que je suis gourmand .......
Je l'ai essayé, mais je ne suis pas arrivé à le faire marcher.
Il créé bien le fichier pb, mais qd je demarre, il tourne en boucle et ne redonne pas la photo originale.
Je suis sous 2000 sur cette machine.
Bonne journée
Comme dab un super code.
Tu va pas y croire mais je cherchais ça aussi.
Tu va me dire que je suis gourmand .......
Je l'ai essayé, mais je ne suis pas arrivé à le faire marcher.
Il créé bien le fichier pb, mais qd je demarre, il tourne en boucle et ne redonne pas la photo originale.
Je suis sous 2000 sur cette machine.
Bonne journée
-
- Messages : 58
- Inscription : jeu. 22/déc./2005 11:23
-
- Messages : 58
- Inscription : jeu. 22/déc./2005 11:23
voici la version qui marche avec les Format reconu par le purebasic
c'est a dire BMP,JPEG,TGA,TIFF,PNG
j'en est profité pour rajouter des petite alerte, car sur des grosses images, on peut avoir l'impression qu'il ne se passe rien (car ça rame !
(a cause du point() !! ))
bien c'est globalement mieux ecris , mais pas "optimisé"
il faudrai que j'ai le courage de changer la fonction point() par un equivalent plus rapide (Lpeek() )
voila voila !

c'est a dire BMP,JPEG,TGA,TIFF,PNG
j'en est profité pour rajouter des petite alerte, car sur des grosses images, on peut avoir l'impression qu'il ne se passe rien (car ça rame !

bien c'est globalement mieux ecris , mais pas "optimisé"
il faudrai que j'ai le courage de changer la fonction point() par un equivalent plus rapide (Lpeek() )
voila voila !

Code : Tout sélectionner
; code by Dobro
; pure basic 4.00
; suporte les Formats BMP,Jpeg,Png,TGA,TIFF
; a utiliser sur de petite image max 1024x768
; car au dela cela Rame Grave :D (la fonction point() est en cause)
UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
Enumeration
#fenetre
#image
#alerte
EndEnumeration
InitSprite()
If OpenWindow(#fenetre, 0, 0, 800, 600, "", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget )
If OpenWindowedScreen(WindowID(#fenetre),0,0,800,600,1,1,1)
NomFichier$ = OpenFileRequester("dobro_datagenerator", "c:\", "Fichiers image|*.bmp;*.jpg;*.jpeg;*.png;*.tga;*.tiff", 0 )
If LoadImage(#image, NomFichier$)
Hauteur = ImageHeight(#image)
Largeur = ImageWidth(#image)
Global Dim tableau(Largeur, Hauteur )
ResizeWindow(#fenetre, 0,0,Largeur,Hauteur)
If StartDrawing(ScreenOutput() )
DrawImage(ImageID(#image), 0, 0 )
StopDrawing()
EndIf
ResizeWindow(#fenetre, 0,0,800,600)
FlipBuffers()
num=CreateFile(#PB_Any,"data.pb") :; ceci ecrit le fichier pb (txt) pour etre charge dans l'editeur !!
WriteStringN(num,"; codé Par Dobro img to data")
WriteStringN(num,"Enumeration")
WriteStringN(num,"#fenetre")
WriteStringN(num,"#image")
WriteStringN(num,"#alerte")
WriteStringN(num,"EndEnumeration")
WriteStringN(num,"If InitSprite() = 0")
WriteStringN(num,"MessageRequester("+Chr($22)+"Erreur"+Chr($22)+","+Chr($22)+ "Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !"+Chr($22)+","+"#PB_MessageRequester_Ok)")
; MessageRequester("","",#PB_MessageRequester_Ok )
WriteStringN(num,"End")
WriteStringN(num,"EndIf")
WriteStringN(num,"If OpenWindow (#alerte, 0, 0, 320, 50,"+Chr($22)+"alerte"+Chr($22)+",#PB_Window_BorderLess|#PB_Window_ScreenCentered ) ")
WriteStringN(num,"If StartDrawing(WindowOutput(#alerte)) ")
WriteStringN(num," DrawText(50, 24, "+Chr($22)+"Patience ! je charge les Datas "+Chr($22)+",RGB(255,50,0),RGB(0,0,0)) ")
WriteStringN(num," StopDrawing() ")
WriteStringN(num," EndIf ")
WriteStringN(num,"EndIf")
WriteStringN(num,"Read Largeur")
WriteStringN(num,"Read Hauteur")
WriteStringN(num,"Global Dim tableau(Largeur, Hauteur)")
WriteStringN(num,"CreateImage(#image, Largeur, Hauteur)")
WriteStringN(num,"If StartDrawing(ImageOutput(#image))")
WriteStringN(num," ; ***********mise en tableau ************")
WriteStringN(num,"For i = 0 To Largeur -1")
WriteStringN(num," For j = 0 To Hauteur -1 ")
WriteStringN(num," Read a.l ")
WriteStringN(num," tableau(i, j)=a.l ")
WriteStringN(num,"Next j")
WriteStringN(num,"Next i")
WriteStringN(num," ; **************************")
WriteStringN(num,"For i = 0 To Largeur -1")
WriteStringN(num," For j = 0 To Hauteur -1 ")
WriteStringN(num," Plot(i,j,tableau(i,j)) ")
WriteStringN(num," Next j")
WriteStringN(num,"Next i")
WriteStringN(num," StopDrawing() ")
WriteStringN(num,"EndIf")
WriteStringN(num," titre$="+Chr($22)+NomFichier$+Chr($22))
; dessous: genere le code qui permet de relire les datas !!
; ouaaa du code qui s'autoecrit !!! :-D
WriteStringN(num,"If OpenWindow (#fenetre, 0, 0, Largeur, Hauteur,titre$,#PB_Window_SystemMenu | #PB_Window_MinimizeGadget|#PB_Window_SizeGadget)")
WriteStringN(num,"If OpenWindowedScreen(WindowID(#fenetre), 0, 0, Largeur, Hauteur, 1, 1, 1) ")
WriteStringN(num,"If StartDrawing(ScreenOutput())")
WriteStringN(num," DrawImage(ImageID(#image), 0, 0) ")
WriteStringN(num,"StopDrawing() ")
WriteStringN(num,"EndIf")
WriteStringN(num,"Largeur=Largeur/4 ; affiche 4 fois plus petit")
WriteStringN(num,"Hauteur=Hauteur/4 ; affiche 4 fois plus petit")
WriteStringN(num,"ResizeWindow(#fenetre,0,0,Largeur,Hauteur)")
WriteStringN(num,"CloseWindow(#alerte)")
WriteStringN(num," Repeat")
WriteStringN(num,"Until WaitWindowEvent()= #PB_Event_CloseWindow")
WriteStringN(num,"EndIf")
WriteStringN(num,"EndIf ")
WriteStringN(num,"End ")
;************************
If OpenWindow (#alerte, 0, 0, 500, 50,"alerte",#PB_Window_BorderLess|#PB_Window_ScreenCentered )
If StartDrawing(WindowOutput(#alerte))
DrawText(50, 24, "Patience ! je sauve les Datas dans 'Data.Pb' ",RGB(255,50,0),RGB(0,0,0))
StopDrawing()
EndIf
EndIf
WriteStringN(num,"DataSection") :; commence la section des data
WriteStringN(num,"Data.l "+Str( Largeur)+","+Str( Hauteur))
StartDrawing(ImageOutput(#image) )
; *********** mise en tableau de l'image ************
For Y=0 To Hauteur-1
For X=0 To Largeur-1
tableau(X,Y)=Point(X, Y)
Next X
Next Y
; *********************************************
For i =0 To Largeur -1
ligne.s="data.l " ; insere la fonction data.l avant les valeurs
For j = 0 To Hauteur-1
ligne.s=ligne.s+Str(tableau(i,j))+",":; met des virgules entre les datas
Next j
ligne.s=Left(ligne.s, Len(ligne.s)-1) :; retire la derniere virgule de la ligne
WriteStringN(num,ligne.s):; ecrit une ligne entiere de data
Next i
StopDrawing()
WriteStringN(num," "):; saute une ligne vide
WriteStringN(num,"EndDataSection") :;ecrit la fin de section data
CloseFile(num)
EndIf
CloseWindow(#alerte)
CloseWindow(#fenetre)
EndIf
EndIf
End
tout flateur vit au dépends de celui qui ecoute , cette leçon vaut bien un fromage sans doutes !!Mais alors les dieux mangent aussi ?????

Dernière modification par Backup le sam. 23/sept./2006 13:45, modifié 1 fois.
-
- Messages : 58
- Inscription : jeu. 22/déc./2005 11:23
Bonjour maitre,
Tout d'abord bravo et merci pour cette nouvelle leçon.
ça marche super avec une BMP de 581 k et ça va, j'y trouve pas trop long.
Tu as raison mon compliment valait bien ce fromage.
Pourquoi pour les autres formats que l'image, ne marcherait pas ???? pourtant c'est du binaire comme le reste non ????
Je sais bien que ce n'est pas la demande initiale mais qui peut le + ...
Dommage car cela aurait pu etre utile pour se creer un generateur de setup par exemple.
Sache que ce n'est pas de la flaterie, mais bien de l'admiration.
J'aimerais tellement avoir votre niveau.
J'y travaille, mais la route est longue.
Et puis il est toujours bon d'avoir un compliment, cela montre que ce que vous faites interesse du monde, et c'est un peu une forme de salaire, car la gratitude de vos fans paye un peu tout le temps et les nombreuses heures que vous passez à les aider bénévolement.
Je parle de toi evidemment et des autres CAID de ce forum, que je commence à connaitre comme Denis, Cpl.bator, SPH, Dr dri, soldat inconnu, comtois etc ...et bien d'autre que je m'excuse d'oublier
Passe une excelente journée.
A bientot (Malheureusement pour toi)
Tout d'abord bravo et merci pour cette nouvelle leçon.
ça marche super avec une BMP de 581 k et ça va, j'y trouve pas trop long.
Tu as raison mon compliment valait bien ce fromage.
Pourquoi pour les autres formats que l'image, ne marcherait pas ???? pourtant c'est du binaire comme le reste non ????
Je sais bien que ce n'est pas la demande initiale mais qui peut le + ...
Dommage car cela aurait pu etre utile pour se creer un generateur de setup par exemple.
Sache que ce n'est pas de la flaterie, mais bien de l'admiration.
J'aimerais tellement avoir votre niveau.
J'y travaille, mais la route est longue.
Et puis il est toujours bon d'avoir un compliment, cela montre que ce que vous faites interesse du monde, et c'est un peu une forme de salaire, car la gratitude de vos fans paye un peu tout le temps et les nombreuses heures que vous passez à les aider bénévolement.
Je parle de toi evidemment et des autres CAID de ce forum, que je commence à connaitre comme Denis, Cpl.bator, SPH, Dr dri, soldat inconnu, comtois etc ...et bien d'autre que je m'excuse d'oublier
Passe une excelente journée.
A bientot (Malheureusement pour toi)
je viens de changer le listing juste au dessus
car je le trouvais un peut trop lent !
j'avais fait une erreur de debutant (mis les startdrawing, et stopdrawing dans les boucles !! ça prends un max de temps
)
j'en est profité pour passer temporairement par un tableau de point, car c'est beaucoup plus rapide, que l'utilisation de plot et point() en direct live
car je le trouvais un peut trop lent !
j'avais fait une erreur de debutant (mis les startdrawing, et stopdrawing dans les boucles !! ça prends un max de temps

j'en est profité pour passer temporairement par un tableau de point, car c'est beaucoup plus rapide, que l'utilisation de plot et point() en direct live

Je veux jouer avec vous!!!!
Ce programme m'interresse BEAUCOUP car je déteste mettre des img jointes quand je poste un prog!
Bilan, je dessine mes sprites avec des plot, des lines et....paint!
Quand je lance le programme, il me demande de charger une image puis....plus rien!
Si les datas sont crées, je ne sais pas où ils sont
Ca marche pour tout le monde apparemment, j'ai dû rater un épisode ou/et je suis un gros nase
Help!
Bilan, je dessine mes sprites avec des plot, des lines et....paint!
Quand je lance le programme, il me demande de charger une image puis....plus rien!
Si les datas sont crées, je ne sais pas où ils sont

Ca marche pour tout le monde apparemment, j'ai dû rater un épisode ou/et je suis un gros nase

Help!
Elevé au MSX !