[Résolu] Comment créer une Datasection à partir d'une image

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

[Résolu] Comment créer une Datasection à partir d'une image

Message par Micoute »

Bonjour à tous,

toujours dans programme de monnaie, j'aurais besoin de créer des données à partir d'images, je sais que je peux faire LoadSprite() ou CatchSprite(), mais pour montrer mon programme sue ce forum, par exemple, ce serait plus portable même si ça grossi énormément le programme, mais c'est surtout pour améliorer mes connaissances en programmation.

Je vous remercie beaucoup pour votre aide bienveillante.
Dernière modification par Micoute le mar. 11/juil./2017 9:48, modifié 1 fois.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
TazNormand
Messages : 1297
Inscription : ven. 27/oct./2006 12:19
Localisation : Calvados (14)

Re: Comment créer une Datasection à partir d'une image

Message par TazNormand »

Salut Micoute,

regardes ce topic

Pour limiter le nombre de sprite, utilise la technique du "SpriteSheet", la feuille de sprite : tous tes sprites sont regroupés sur un seul fichier image et tu crées ce que tu as besoin via GrabSprite() et les coordonnées. C'est une technique très très utilisées en Web pour éviter le chargement de n sprites puisqu'au final tu ne charges qu'un seul fichier image.
Image
Image
Marc56
Messages : 2198
Inscription : sam. 08/févr./2014 15:19

Re: Comment créer une Datasection à partir d'une image

Message par Marc56 »

Pour la mise au point du programme et pour mettre des exemples légers sur le forum créé simplement des cercles avec la valeur inscrite dessus.
Tu mettras les images ensuite.
Ou tu peux même créer un code qui créé l'image (cercle + texte) s'il ne trouve pas l'image sur le disque.

:wink:
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: Comment créer une Datasection à partir d'une image

Message par Micoute »

@TazNormand Il y a une petite erreur à la ligne 90 : remplacer Read a.l par Read.l a.l, il faut dire que c'est une version qui date

@Marc56 C'est tellement évident, que je n'y ai même pas pensé, ce ne sont que des enfants qui vont au CP, mais c'est vrai qu'avec des "vraies" pièces, c'est plus joli
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: [Résolu] Comment créer une Datasection à partir d'une im

Message par Zorro »

@Micoute

tu utilise EPb je crois !??

dans les outils tu as un outils qui s’appelle "EPB_img2data" qui sert exactement a ça !! ;)

tu lances l'outil , tu choisi le nombre de data par ligne que tu veux (20 par defaut )
tu click sur Run , tu choisi l'image a mettre en data
tu decide de generer des data seul ou bien avec le loader integré au listing

ça te propose de sauvegarder le listing
ça te colle le resultat complet dans EPB !!

voici un exemple obtenu , avec loader integré

Code : Tout sélectionner

; Loader_Data :Génré Par img2data_EPB (by Dobro)
UseJPEGImageDecoder()
UsePNGImageDecoder()
UseTGAImageDecoder()
UseTIFFImageDecoder()
Enumeration
		#fenetre
		#image
		#alerte
EndEnumeration
If InitSprite() = 0
		MessageRequester("Erreur","Impossible d'ouvrir l'écran & l'environnement nécessaire aux sprites !",#PB_MessageRequester_Ok)
		End
EndIf
If OpenWindow (#alerte, 0, 0, 320, 50,"alerte",#PB_Window_BorderLess|#PB_Window_ScreenCentered ) 
		If StartDrawing(WindowOutput(#alerte)) 
				DrawText(50, 24, "Patience ! je charge les Datas ",RGB(255,50,0),RGB(0,0,0)) 
		StopDrawing() 
EndIf 
EndIf
Read Largeur
Read Hauteur
Global Dim tableau(Largeur, Hauteur)
CreateImage(#image, Largeur, Hauteur)
If StartDrawing(ImageOutput(#image))
		; ***********mise en tableau ************
		For i = 0 To Hauteur -1
				For j = 0 To Largeur -1 
						Read a.l 
						tableau(j, i)=a.l 
				Next j
		Next i
		; **************************
		For i = 0 To Hauteur -1
				For j = 0 To Largeur -1 
						Plot(j,i,tableau(j,i)) 
				Next j
		Next i
StopDrawing() 
EndIf
titre$="D:\Dobro\PureBasic\dobro\ExemplePerso\case\Image2.png"
If OpenWindow (#fenetre, 0, 0, Largeur, Hauteur,titre$,#PB_Window_SystemMenu | #PB_Window_MinimizeGadget|#PB_Window_SizeGadget)
		If  OpenWindowedScreen(WindowID(#fenetre), 0, 0, Largeur, Hauteur, 1, 1, 1) 
				If StartDrawing(ScreenOutput())
						DrawImage(ImageID(#image), 0, 0)  
				StopDrawing() 
		EndIf
		Largeur=800 ; affiche en 800 x600 la vrais resolution est de :32x32
		Hauteur=600 ; affiche en 800 x600 la vrais resolution est de :32x32
		ResizeWindow(#fenetre,0,0,Largeur,Hauteur)
		CloseWindow(#alerte)
		Repeat
		Until WaitWindowEvent()= #PB_Event_CloseWindow
EndIf
EndIf 
End 
DataSection
		Data.l 32,32
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF
		data.l $F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF
		data.l $F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF
		data.l $F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF
		data.l $F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF
		data.l $F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF
		data.l $F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF
		data.l $F2FF,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF
		data.l $F2FF,$F2FF,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF
		data.l $F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF
		data.l $F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF
		data.l $F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF
		data.l $F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$F2FF
		data.l $F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED
		data.l $F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF,$F2FF,$F2FF,$241CED,$241CED,$241CED
		data.l $241CED,$F2FF,$F2FF,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$F2FF,$F2FF
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED,$241CED
		data.l $241CED,$241CED,$241CED,$241CED,$241CE
		
EndDataSection
; Epb


Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: [Résolu] Comment créer une Datasection à partir d'une im

Message par Micoute »

Je savais que j'avais vu ça quelque part, mais je ne me rappelais plus où, alors que je l'avais sous les yeux. On ne devrait pas vieillir ...
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

Re: [Résolu] Comment créer une Datasection à partir d'une im

Message par Tonio »

Bonjour Zorro

Merci pour ce partage Epb est cool
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

Re: [Résolu] Comment créer une Datasection à partir d'une im

Message par Tonio »

je viens de testé ton code
j'ai un message à cette ligne :
Global Dim tableau(Largeur, Hauteur)
Accés mémoire invalide
testé avec
Purebasic 5.60 64 bits
Avatar de l’utilisateur
Zorro
Messages : 2186
Inscription : mar. 31/mai/2016 9:06

Re: [Résolu] Comment créer une Datasection à partir d'une im

Message par Zorro »

c'est normal ! :)

lorsque j'ai codé ça je ne codais qu'en 32bits (d'ailleurs , je ne continue a coder qu'en 32 bits !! )

pour que ça marche en 64 bit il faut Chercher /remplacer Data.l (long) par Data.i (integer )

.L pour les 32 bits et .i pour 64 bits ...

je modifierai l'outils de conversion en ajoutant une case 64 bits ou 32 bits

Merci pour le bug trouvé
Tonio
Messages : 95
Inscription : ven. 07/avr./2017 14:49
Localisation : Sud Est

Re: [Résolu] Comment créer une Datasection à partir d'une im

Message par Tonio »

Zorro a écrit :c'est normal ! :)

lorsque j'ai codé ça je ne codais qu'en 32bits (d'ailleurs , je ne continue a coder qu'en 32 bits !! )

pour que ça marche en 64 bit il faut Chercher /remplacer Data.l (long) par Data.i (integer )

.L pour les 32 bits et .i pour 64 bits ...

je modifierai l'outils de conversion en ajoutant une case 64 bits ou 32 bits

Merci pour le bug trouvé
De rien mon ami
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: [Résolu] Comment créer une Datasection à partir d'une im

Message par falsam »

Bin2Data.pb est un code crée par ts-soft (Forum anglophone) permetant de générer les data section pour des images, des sons et des icones par glisser déposer.

Demo.pb montre la façon d'utiliser la datasection.

:arrow: https://github.com/pbcodex/Bin2Data/archive/master.zip
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Micoute
Messages : 2584
Inscription : dim. 02/oct./2011 16:17
Localisation : 35520 La Mézière

Re: [Résolu] Comment créer une Datasection à partir d'une im

Message par Micoute »

Merci falsam pour le bon conseil et pour le lien.
Microsoft Windows 10 Famille 64 bits : Carte mère : ASRock 970 Extreme3 R2.0 : Carte Graphique NVIDIA GeForce RTX 3080 : Processeur AMD FX 6300 6 cœurs 12 threads 3,50 GHz PB 6.20 LTS (x64)
Un homme doit être poli, mais il doit aussi être libre !
Répondre