<Convertion image/Data>
Publié : mer. 20/sept./2006 18:40
Bonjours, pouvez vous me dire SVP comment convertir une image ou îcone en Data pour que ça puisse rentrer dans une DataSection ?, merci à tous! 

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
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)
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
ben c'est que ce sujet a deja ete abordé il y a un moment sur le forumbombseb a écrit :c'est pas marrant, dès qu'on demande un truc, on a une réponse et plusieurs programmes déja tout fait
ben non il suffit d'ajouter les convertisseur de purebasicandrebernard a écrit :jpg, doc, zip, mp3 etc ...???
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 ?????