FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC

Développement d'applications avec le langage Panoramic
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  MembresMembres  Connexion  
Derniers sujets
» PANORAMIC V 1
Data Image Creator  D.I.C Emptypar papydall Aujourd'hui à 3:22

» select intégrés [résolu]
Data Image Creator  D.I.C Emptypar jjn4 Hier à 17:00

» number_mouse_up
Data Image Creator  D.I.C Emptypar jjn4 Hier à 11:59

» Aide de PANORAMIC
Data Image Creator  D.I.C Emptypar jjn4 Hier à 11:16

» trop de fichiers en cours
Data Image Creator  D.I.C Emptypar lepetitmarocain Hier à 10:43

» Je teste PANORAMIC V 1 beta 1
Data Image Creator  D.I.C Emptypar papydall Hier à 4:17

» bouton dans autre form que 0
Data Image Creator  D.I.C Emptypar leclode Lun 6 Mai 2024 - 13:59

» KGF_dll - nouvelles versions
Data Image Creator  D.I.C Emptypar Klaus Lun 6 Mai 2024 - 11:41

» Gestion d'un système client-serveur.
Data Image Creator  D.I.C Emptypar Klaus Lun 6 Mai 2024 - 10:23

» Editeur EliP 6 : Le Tiny éditeur avec 25 onglets de travail
Data Image Creator  D.I.C Emptypar Froggy One Jeu 2 Mai 2024 - 11:16

» @Jack
Data Image Creator  D.I.C Emptypar Jack Mar 30 Avr 2024 - 20:40

» Une calculatrice en une ligne de programme
Data Image Creator  D.I.C Emptypar jean_debord Dim 28 Avr 2024 - 8:47

» Form(résolu)
Data Image Creator  D.I.C Emptypar leclode Sam 27 Avr 2024 - 17:59

» Bataille navale SM
Data Image Creator  D.I.C Emptypar jjn4 Ven 26 Avr 2024 - 17:39

» Les maths du crocodile
Data Image Creator  D.I.C Emptypar jean_debord Jeu 25 Avr 2024 - 10:37

Navigation
 Portail
 Index
 Membres
 Profil
 FAQ
 Rechercher
Rechercher
 
 

Résultats par :
 
Rechercher Recherche avancée
Mai 2024
LunMarMerJeuVenSamDim
  12345
6789101112
13141516171819
20212223242526
2728293031  
CalendrierCalendrier
-50%
Le deal à ne pas rater :
-50% Baskets Nike Air Huarache Runner
69.99 € 139.99 €
Voir le deal

 

 Data Image Creator D.I.C

Aller en bas 
5 participants
Aller à la page : 1, 2  Suivant
AuteurMessage
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: Data Image Creator D.I.C   Data Image Creator  D.I.C EmptyVen 24 Aoû 2012 - 0:54

Petit outils perso que je viens de me créer...

Code:
' Créateur de fichier *.bas incorporables par un un include dans un source
' contenant une image sous forme de data
' ------------------------------------------------------------------------------
dim D$,file$,H%,L%,R%,G%,B%,Point$,res%,nom$
dim x%,y%
D$=dir_current$
' ------------------------------------------------------------------------------
label Load_image,Save,Quitter
' ------------------------------------------------------------------------------
height 0,64:width 0,211:left 0,(screen_x-211)/2
caption 0,"D.I.C"

button 1:width 1,120:cursor_point 1
caption 1,"Charger une image":on_click 1,Load_image
button 5:left 5,120:caption 5,"Quitter":on_click 5,Quitter
cursor_point 5
Image 2

dlist 10
end
' ------------------------------------------------------------------------------
Load_image:
inactive 1

' chargement d'une image
open_dialog 3
file$=file_name$(3)
delete 3

if file$<>"_"
  file_load 2,file$
  ' récupération de la hauteur et de la largeur de l'image chargé
  clipboard_copy 2
  dll_on D$+"\KGF.dll"
  res% = dll_call0("GetClipboardPictureHeight")
  H%=res%
  res% = dll_call0("GetClipboardPictureWidth")
  L%=res%
  dll_off

  ' création du form invible de travail
  if object_exists(100)=0
  form 100:hide 100:command_target_is 100
  picture 101:width 101,L% :height 101,H%

  ' placement de l'image chargé dans le picture 3
  file_load 101,file$

  ' Ecriture des données dans le dlist
  nom$=file_extract_name$(file$)
  item_add 10,"Data"+chr$(32)+left$(nom$,len(nom$)-4)
  item_add 10,"Data"+chr$(32)+str$(H%)
  item_add 10,"Data"+chr$(32)+str$(L%)
  for x%=0 to L% -1
      for y%= 0 to H% -1
        R% =color_pixel_red(101,x%,y%)
        G% =color_pixel_green(101,x%,y%)
        B% =color_pixel_blue(101,x%,y%)
        point$="data"+chr$(32)+str$(x%)+","+str$(y%)+","+str$(R%)+","+str$(G%)+","+str$(B%)
        item_add 10,point$
      next y%
  next x%
  ' Enregistrement du fichier
  gosub Save
  end_if
end_if
command_target_is 0
if object_exists(100)=1 then delete 100
active 1
return
' ------------------------------------------------------------------------------
Save:
if message_input("Nom du fichier","Nom du fichier sans extension",left$(Nom$,len(nom$)-4))=1
  file_save 10,D$+"\"+message_text$+".bas"
  clear 10
  file$="":H%=0:L%=0:R%=0:G%=0:B%=0:point$="":x%=0:y%=0
else
  if message_warning_yes_no("Etes vous sûr de vouloir annuler ?"+chr$(13)+"(Toutes les données seront effacées)")=1
      clear 10
      file$="":H%=0:L%=0:R%=0:G%=0:B%=0:point$="":x%=0:y%=0
  else
      goto Save
  end_if
end_if
return
' ------------------------------------------------------------------------------
Quitter:
terminate
( Nécessite KGF.dll)
Donnez vôtre avis...
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: Amélioration   Data Image Creator  D.I.C EmptySam 25 Aoû 2012 - 13:30

Je viens d'apporter un petit changement dans D.I.C

Toutes les infos sont sur la première ligne Data
avec en plus le nombre de lignes dédiés à l'image.

ce qui donne pour la première ligne:

Data Nom du fichier$,Hauteur%,Largeur%,Nbre de ligne%

Code:
' Créateur de fichier *.bas incorporables par un un include dans un source
' contenant une image sous forme de data
' ------------------------------------------------------------------------------
dim D$,file$,H%,L%,R%,G%,B%,Point$,res%,nom$,t%
dim x%,y%,Nb_H%
D$=dir_current$
DO$=D$+"\ DIC_Output"
if dir_exists(DO$)=0 then dir_make DO$
' ------------------------------------------------------------------------------
label Load_image,Save,Quitter
' ------------------------------------------------------------------------------
height 0,64:width 0,211:left 0,(screen_x-211)/2
caption 0,"D.I.C"

button 1:width 1,120:cursor_point 1
caption 1,"Charger une image":on_click 1,Load_image
button 5:left 5,120:caption 5,"Quitter":on_click 5,Quitter
cursor_point 5
Image 2

dlist 10

end
' ------------------------------------------------------------------------------
Load_image:
inactive 1

' chargement d'une image
open_dialog 3
file$=file_name$(3)
delete 3

if file$<>"_"
  file_load 2,file$
  ' récupération de la hauteur et de la largeur de l'image chargé
  clipboard_copy 2
  dll_on D$+"\KGF.dll"
  res% = dll_call0("GetClipboardPictureHeight")
  H%=res%
  res% = dll_call0("GetClipboardPictureWidth")
  L%=res%
  dll_off

  ' création du form invible de travail
  if object_exists(100)=0
  form 100:hide 100:command_target_is 100
  picture 101:width 101,L% :height 101,H%

  ' placement de l'image chargé dans le picture 3
  file_load 101,file$

  ' Ecriture des données dans le dlist
  nom$=file_extract_name$(file$)
  Nb_H%=0
  for x%=0 to L% -1
      for y%= 0 to H% -1
        R% =color_pixel_red(101,x%,y%)
        G% =color_pixel_green(101,x%,y%)
        B% =color_pixel_blue(101,x%,y%)
        point$="data"+chr$(32)+str$(x%)+","+str$(y%)+","+str$(R%)+","+str$(G%)+","+str$(B%)
        Nb_H%=Nb_H%+1
        item_add 10,point$
      next y%
  next x%
  item_insert 10,1,"Data"+chr$(32)+left$(nom$,len(nom$)-4)+","+str$(H%)+","+str$(L%)+","+str$(Nb_H%)
  ' Enregistrement du fichier
  gosub Save
  end_if
end_if
command_target_is 0
if object_exists(100)=1 then delete 100
active 1
return
' ------------------------------------------------------------------------------
Save:
if message_input("Nom du fichier","Nom du fichier sans extension",left$(Nom$,len(nom$)-4))=1
  file_save 10,DO$+"\"+message_text$+".bas"
  clear 10
  cls
  file$="":H%=0:L%=0:R%=0:G%=0:B%=0:point$="":x%=0:y%=0
else
  if message_warning_yes_no("Etes vous sûr de vouloir annuler ?"+chr$(13)+"(Toutes les données seront effacées)")=1
      clear 10
      file$="":H%=0:L%=0:R%=0:G%=0:B%=0:point$="":x%=0:y%=0
  else
      goto Save
  end_if
end_if
return
' ------------------------------------------------------------------------------
Quitter:
terminate

il y a un dossier output en auto-création en plus aussi... Laughing

Temps de codage pour un *.bmp de 225x225 , 10.25escondes


Dernière édition par ygeronimi le Sam 25 Aoû 2012 - 17:17, édité 2 fois (Raison : correction)
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Data Image Creator  D.I.C Empty
MessageSujet: Re: Data Image Creator D.I.C   Data Image Creator  D.I.C EmptySam 25 Aoû 2012 - 14:25

ok mais pour gagner du temps et des lignes, tu devrais supprimer le stockage de x et de y comme le disais Nardo
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: re   Data Image Creator  D.I.C EmptySam 25 Aoû 2012 - 16:54

Je viens de corriger une erreur d' inattention de ma part.

@ Jicehel

Pour gagner des lignes, je suis d'accord...
mais pour gagner du temps, je suis septique...
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Data Image Creator  D.I.C Empty
MessageSujet: Re: Data Image Creator D.I.C   Data Image Creator  D.I.C EmptySam 25 Aoû 2012 - 17:36

Ça sera infime, je te l'accorde, mais puisque tu auras moins de traitement, tu auras un peu moins de temps. (Chaine plus petite à traiter et 4 opérations à faire en moins par point, multiplié par le nombre de points, ça fini quand même par représenter un gain de temps...)
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: re   Data Image Creator  D.I.C EmptySam 25 Aoû 2012 - 17:52

le top du top serait qu'il finisse par me créer l'image
avant même que je le lui demande... Laughing Laughing Laughing

je ris tout seul de ma connerie... Laughing Laughing Laughing


bon, je vais voir çà...

Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: re   Data Image Creator  D.I.C EmptySam 25 Aoû 2012 - 19:06

STOP !!!!!

Je reste sur mon codage, cela fait plus d'une heure que je me bat avec la reconstitution des flags façon Nardo26 et là, JE CRAQUE !!!!! rendeer geek drunken bom king alien alien bounce
je pars pour le drapeau allemand et je me retrouve avec le drapeau provencal scratch scratch

Bref, en plus je ne gagne qu'une seconde...c'est quoi une seconde dans une vie ....hein?!
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: nouvelle version   Data Image Creator  D.I.C EmptyMer 29 Aoû 2012 - 15:08

Voilà la version 2, tout en panoramic et pour plusieurs images

Code:
' Data Image Creator V2 (Version tout panoramic )
' génère un fichier "Include_Image.bas" contenant les images sélectionnés
' sous forme de data et la fonction de recréation de ces images.
' La fonction déclare et libère la plupart de ses propres variables,
' seules les variables x% et y% sont à déclarer dans le source principale et seul la variable
' DI$ (adresse du dossier "auto-créé" où sont recréées les images ) est conservé.
' La fonction à appeler, et à déclarer dans les label,dans l'Init du source pour
' re-créer les images est:Create_File_Image

dim x%,list%,Menu%
dim er$,a$,f$,i%,wi%,hi%
dim v%(20), ii%, offs%, posit%, ad, sz
dim D$,file$,H%,L%,R%,G%,B%,res%,nom$,t%,DO$,y%
' ------------------------------------------------------------------------------
label Init
label Menu,Ajouter,Coder,Get_Size,Quitter
label Effacer
' ------------------------------------------------------------------------------
width 0,320:height 0,250
caption 0,"Data Image Créator Vs0.2":font_name 0,"arial"

main_menu 1
for x%=2 to 4 :sub_menu x% :parent x%,1:on_click x%,Menu:next x%
caption 2,"Ajouter":caption 3,"Coder":caption 4,"Quitter"

list 5:width 5,304:height 5,170:on_double_click 5,Effacer

alpha 6:top 6,172:left 6,20:caption 6,"Double cliquer sur un item pour l'effacer"
font_color 6,140,30,40

gosub Init
end
' ------------------------------------------------------------------------------
Init:
  D$=Dir_current$
  if dir_exists(D$+"\Output")=0 then dir_make D$+"\Output"
  DO$=D$+"\Output"
return
' ------------------------------------------------------------------------------
Menu:
  for x%=2 to 4
      if clicked(x%)=1 then Menu%=x%
  next x%
  select Menu%
  case 2
      gosub Ajouter
  case 3
      gosub Coder
      inactive 2:inactive 4
  case 4
      gosub Quitter
  end_select
return
' ------------------------------------------------------------------------------
Ajouter:
  open_dialog 7
  filter 7,"*.jpg;*.bmp|*.jpg;*.bmp"
  file$=file_name$(7)
  item_add 5,file$
  delete 7
return
' ------------------------------------------------------------------------------
Effacer:
  if count(5)>0 then item_delete 5,item_index(5)
return
' ------------------------------------------------------------------------------
Coder:
  ' ouverture du fichier en création
  file_open_write 8,DO$+"\include_image.bas"
      ' ecriture de la fonction de re-création des fichiers *.bmp
      file_writeln 8,"Create_File_Image:"
      file_writeln 8,"dim DI$,Titre$,haut%,large%,Nbre_lign%,R%,G%,B%,col%,lign%,db%"
      file_writeln 8,"if dir_exists(Dir_current$+"+chr$(34)+"\Picture"+chr$(34)+")=0 then dir_make dir_current$+"+chr$(34)+"\Picture"+chr$(34)
      file_writeln 8,"DI$=Dir_current$+"+chr$(34)+"\Picture"+chr$(34)
      file_writeln 8,"for db%=1 to "+str$(count(5))
      file_writeln 8,"  read Titre$ : read haut% : read large% :read Nbre_lign%"
      file_writeln 8,"  if object_exists(800)=0"
      file_writeln 8,"      form 800:hide 800"
      file_writeln 8,"      command_target_is 800"
      file_writeln 8,"      picture 801"
      file_writeln 8,"  end_if"
      file_writeln 8,"  width 801,large% :height 801,haut% :2d_target_is 801"
      file_writeln 8,"  for x%=1 to Nbre_Lign%"
      file_writeln 8,"      read col% :read lign% :read R% :read G% :read B%"
      file_writeln 8,"      2d_pen_color R%,G%,B%"
      file_writeln 8,"      2d_point col%,lign%"
      file_writeln 8,"  next x%"
      file_writeln 8,"file_save 801,DI$+"+chr$(34)+"\"+chr$(34)+"+titre$"
      file_writeln 8,"cls"
      file_writeln 8,"next db%"
      file_writeln 8,"command_target_is 0"
      file_writeln 8,"Delete 800"
      file_writeln 8,"free Titre$ :free haut% :free large% :free Nbre_lign% "
      file_writeln 8,"free R% :free G% :free B% :free col% :free lign% : free db%"
      file_writeln 8,"return"
      ' ajout des fichiers data à assembler
      for list%=1 to count(5)
        ' création du form invible de travail
        if object_exists(100)=0
            form 100:hide 100:command_target_is 100
            picture 101:width 101,L% :height 101,H%
        end_if
        ' placement de l'image chargé dans le picture 101
        file_load 101,item_read$(5,list%)
        gosub Get_Size
        ' Ecriture des données
        nom$=file_extract_name$(item_read$(5,list%))
        file_writeln 8,"Data"+chr$(32)+nom$+","+str$(H%)+","+str$(L%)+","+str$(L%*H%)
        for x%=0 to L% -1
            for y%= 0 to H% -1
              R% =color_pixel_red(101,x%,y%)
              G% =color_pixel_green(101,x%,y%)
              B% =color_pixel_blue(101,x%,y%)
              file_writeln 8,"data"+chr$(32)+str$(x%)+","+str$(y%)+","+str$(R%)+","+str$(G%)+","+str$(B%)
            next y%
        next x%
      next list%
  file_close 8
  clear 5
  command_target_is 0
  active 2:active 4
  if object_exists(100)=1 then delete 100
return
' ------------------------------------------------------------------------------
Get_Size:
  f$=item_read$(5,list%)
  er$ = "": a$ = UPPER$(FILE_EXTRACT_EXTENSION$(f$))
  IF a$ <>".JPG" AND a$ <> ".BMP" THEN er$ = "Format incorrect": RETURN

  FILEBIN_OPEN_READ 1, f$: sz = FILEBIN_SIZE(1)
  IF a$ = ".JPG"
      FOR ii% = 1 TO 2: FILEBIN_READ 1, v%(ii%): NEXT ii%
      IF v%(1) <> 255 OR v%(2) <> 216 THEN er$ = "en-tête non FFD8.": GOTO reter
      ad = 0: offs% = 0
      REPEAT
        REPEAT
            posit% = ad + 2 + offs%
            IF posit% >= sz THEN er$ = "FFCx non trouvé.": GOTO reter
            FILEBIN_POSITION 1, posit%
            FOR i% = 1 TO 4: FILEBIN_READ 1, v%(i%): NEXT i%
            IF v%(1) <> 255 THEN er$ = "Chaînage incorrect": GOTO reter
            offs% = 256*v%(3) + v%(4)
            ad = FILEBIN_POS(1) - 4
        UNTIL (v%(2) >= 192 AND v%(2) <= 195): ' # FFC0 à FFC3
        FOR ii% = 1 TO 5: FILEBIN_READ 1, v%(ii%): NEXT ii%
      UNTIL v%(1) = 8
      hi% = 256*v%(2) + v%(3): wi% = 256*v%(4) + v%(5)
  ELSE
      FILEBIN_POSITION 1, 18
      FOR ii% = 1 TO 8: FILEBIN_READ 1, v%(ii%): NEXT ii%
      wi% = v%(1) + 256*v%(2) + 256*256*v%(3) + 256*256*256*v%(4)
      hi% = v%(5) + 256*v%(6) + 256*256*v%(7) + 256*256*256*v%(8)
      L%=wi%
      H%=hi%
  END_IF
  FILEBIN_CLOSE 1
return

Quitter:
terminate


Dernière édition par ygeronimi le Mer 29 Aoû 2012 - 18:34, édité 5 fois (Raison : correction de quelques fot dotografe)
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Data Image Creator  D.I.C Empty
MessageSujet: Re: Data Image Creator D.I.C   Data Image Creator  D.I.C EmptyMer 29 Aoû 2012 - 16:20

Je viens de faire un essai;
Je selectionne une image puis je clique sur coder..
J'obtiens : OBJECT number out of range. Line 100
scratch
remplace ton HIDE 101 par HIDE 100 ça marchera mieux... Wink

EDIT :
J'ai un peu amélioré ton code (voir les commentaires dans le source ci-dessous)
t'es pas obligé d'appliqué celui-ci, si tu préfères le tiens je ne serai pas vexé Wink

Code:
' Data Image Creator V2 (Version tout panoramic )
' génère un fichier "Include_Image.bas" contenant les images sélectionnés
' sous forme de data et la fonction de recréation de ces images.
' La fonction déclare et libère la plupart de ses propres variables,
' seul la variable x% est à déclaré dans le source principale et seul la variable
' DI$ (adresse du dossier "auto-créé" où sont recréées les images ) est conservé.
' La fonction à appeler, et à déclarer dans les label,dans l'Init du source pour
' re-créer les images est:Create_File_Image

dim x%,list%,Menu%
dim er$,a$,f$,i%,wi%,hi%
dim v%(20), ii%, offs%, posit%, ad, sz
dim D$,file$,H%,L%,R%,G%,B%,res%,nom$,t%,DO$,y%
' ------------------------------------------------------------------------------
label Init
label Menu,Ajouter,Coder,Get_Size,Quitter
label Effacer
' ------------------------------------------------------------------------------
width 0,320:height 0,250
caption 0,"Data Image Créator Vs0.2":font_name 0,"arial"

main_menu 1
for x%=2 to 4 :sub_menu x% :parent x%,1:on_click x%,Menu:next x%
caption 2,"Ajouter":caption 3,"Coder":caption 4,"Quitter"

list 5:width 5,304:height 5,170:on_double_click 5,Effacer

alpha 6:top 6,172:left 6,20:caption 6,"Double cliquer sur un item pour l'effacer"
font_color 6,140,30,40

gosub Init
end
' ------------------------------------------------------------------------------
Init:
  D$=Dir_current$
  if dir_exists(D$+"\Output")=0 then dir_make D$+"\Output"
  DO$=D$+"\Output"
return
' ------------------------------------------------------------------------------
Menu:
  for x%=2 to 4
      if clicked(x%)=1 then Menu%=x%
  next x%
  select Menu%
  case 2
      gosub Ajouter
  case 3
      gosub Coder
      inactive 2:inactive 4
  case 4
      gosub Quitter
  end_select
return
' ------------------------------------------------------------------------------
Ajouter:
  open_dialog 7
  filter 7,"*.jpg;*.bmp|*.jpg;*.bmp"
  file$=file_name$(7)
  item_add 5,file$
  delete 7
return
' ------------------------------------------------------------------------------
Effacer:
  if count(5)>0 then item_delete 5,item_index(5)
return
' ------------------------------------------------------------------------------
Coder:
  ' ouverture du fichier en création
  file_open_write 8,DO$+"\include_image.bas"
      ' ecriture de la fonction de re-création des fichiers *.bmp
      file_writeln 8,"Create_File_Image:"
      file_writeln 8,"dim DI$,Titre$,haut%,large%,Nbre_lign%,R%,G%,B%,col%,lign%,db%"
      ' ------------------------------------------------------------------------
      ' Debug NARDO : faut pas oublier x%... ;)
      ' ------------------------------------------------------------------------
      file_writeln 8,"dim x%,y%"

      file_writeln 8,"if dir_exists(Dir_current$+"+chr$(34)+"\Picture"+chr$(34)+")=0 then dir_make dir_current$+"+chr$(34)+"\Picture"+chr$(34)
      file_writeln 8,"DI$=Dir_current$+"+chr$(34)+"\Picture"+chr$(34)
      file_writeln 8,"for db%=1 to "+str$(count(5))
      file_writeln 8,"  read Titre$ : read large% : read haut%"
      file_writeln 8,"  if object_exists(800)=0"
      file_writeln 8,"      form 800:hide 800"
      file_writeln 8,"      command_target_is 800"
      file_writeln 8,"      picture 801"
      file_writeln 8,"  end_if"
      file_writeln 8,"  width 801,large% :height 801,haut% :2d_target_is 801"
      file_writeln 8,"  for y%=0 to haut%-1"
      file_writeln 8,"    for x%=0 to large%-1"
      file_writeln 8,"      read R% :read G% :read B%"
      file_writeln 8,"      2d_pen_color R%,G%,B%"
      file_writeln 8,"      2d_point x%,y%"
      file_writeln 8,"    next x%"
      file_writeln 8,"  next y%"
      file_writeln 8,"  file_save 801,DI$+"+chr$(34)+"\"+chr$(34)+"+titre$"
      file_writeln 8,"  cls"
      file_writeln 8,"next db%"
      file_writeln 8,"command_target_is 0"
      file_writeln 8,"Delete 800"
      file_writeln 8,"free x% :free y%"
      file_writeln 8,"free Titre$ :free haut% :free large% :free Nbre_lign% "
      file_writeln 8,"free R% :free G% :free B% :free col% :free lign% : free db%"
      file_writeln 8,"return"
      ' ajout des fichiers data à assembler
      for list%=1 to count(5)
        ' création du form invible de travail
        if object_exists(100)=0
            form 100:hide 100:command_target_is 100
            picture 101:width 101,L% :height 101,H%
        end_if
        ' placement de l'image chargé dans le picture 101
        file_load 101,item_read$(5,list%)
        gosub Get_Size
        ' Ecriture des données
        nom$=file_extract_name$(item_read$(5,list%))
       
        ' ----------------------------------------------------------------------
        ' DEBUG Nardo :
        ' un chr$(34) pour ne pas avoir des mauvaises surprises sur le nom
        ' Par convention on donne toujours la largeur suivi de la hauteur
        ' le dernier data ne sert à rien puisqu'il peut être calculé avec L% et H%
        ' ----------------------------------------------------------------------
        ' l'image sera au final sauvegardée en bmp donc il faut penser à changer
        ' son extension. Si on laisse jpg on va se retrouver au final avec un bmp
        ' qui portera le nom "output\picture\image.jpg"
        nom$=LEFT$(nom$,len(nom$)-3)+"bmp"
        ' les valeurs L% et H% serviront pour le décodage (voir boucles imbriquées)
        file_writeln 8,"Data "+chr$(34)+nom$+chr$(34)+","+str$(L%)+","+str$(H%)

        ' ----------------------------------------------------------------------
        ' DEBUG Nardo :
        ' pas besoin de sauvegarder x et y: il suffira lors du décodage d'appliquer
        ' les même boucles imbriquées dans le même ordre...
        ' (voir le code généré dans les writeln au dessus)
        ' ----------------------------------------------------------------------
        ' Donc on commence par faire la 1ere ligne puis les suivantes :
        DIM Ligne$
        for y%=0 to H%-1
          ' puis on s'occupe de chaque pixel de la ligne en cours
          ' pas besoin de faire une ligne de DATA par pixels :
          ' cela risque de faire au final un gros fichier (un CRLF/Pixel) illisible
          Ligne$="DATA "
          for x%=0 to L%-1
              R% =color_pixel_red(101,x%,y%)
              G% =color_pixel_green(101,x%,y%)
              B% =color_pixel_blue(101,x%,y%)
              Ligne$=Ligne$+str$(R%)+","+str$(G%)+","+str$(B%)+","
              ' si notre ligne fait 64 caractères, on l'écrit puis on recommence
              ' une nouvelle ligne de data...
              If len(ligne$)>64
                ' le left$ est necessaire pour ne pas sauvegarder la dernière virgule
                file_writeln 8,LEFT$(Ligne$,LEN(Ligne$)-1)
                Ligne$="DATA "
              End_if
          next x%
          ' la derniere ligne de data ne fait pas forcement 64 caractères, il ne faut
          ' pas l'oublier... ;)
          if len(ligne$)>5 THEN file_writeln 8,LEFT$(Ligne$,LEN(Ligne$)-1)
        next y%
       
      next list%
  file_close 8
  clear 5
  command_target_is 0
  active 2:active 4
  if object_exists(100)=1 then delete 100
return
' ------------------------------------------------------------------------------
Get_Size:
  f$=item_read$(5,list%)
  er$ = "": a$ = UPPER$(FILE_EXTRACT_EXTENSION$(f$))
  IF a$ <>".JPG" AND a$ <> ".BMP" THEN er$ = "Format incorrect": RETURN

  FILEBIN_OPEN_READ 1, f$: sz = FILEBIN_SIZE(1)
  IF a$ = ".JPG"
      FOR ii% = 1 TO 2: FILEBIN_READ 1, v%(ii%): NEXT ii%
      IF v%(1) <> 255 OR v%(2) <> 216 THEN er$ = "en-tête non FFD8.": GOTO reter
      ad = 0: offs% = 0
      REPEAT
        REPEAT
            posit% = ad + 2 + offs%
            IF posit% >= sz THEN er$ = "FFCx non trouvé.": GOTO reter
            FILEBIN_POSITION 1, posit%
            FOR i% = 1 TO 4: FILEBIN_READ 1, v%(i%): NEXT i%
            IF v%(1) <> 255 THEN er$ = "Chaînage incorrect": GOTO reter
            offs% = 256*v%(3) + v%(4)
            ad = FILEBIN_POS(1) - 4
        UNTIL (v%(2) >= 192 AND v%(2) <= 195): ' # FFC0 à FFC3
        FOR ii% = 1 TO 5: FILEBIN_READ 1, v%(ii%): NEXT ii%
      UNTIL v%(1) = 8
      hi% = 256*v%(2) + v%(3): wi% = 256*v%(4) + v%(5)

      ' ----------------------------------------------------------------------
      ' DEBUG Nardo : il manquait l'init de L% et H%
      ' ----------------------------------------------------------------------
      L%=wi%:H%=hi%
  ELSE
      FILEBIN_POSITION 1, 18
      FOR ii% = 1 TO 8: FILEBIN_READ 1, v%(ii%): NEXT ii%
      wi% = v%(1) + 256*v%(2) + 256*256*v%(3) + 256*256*256*v%(4)
      hi% = v%(5) + 256*v%(6) + 256*256*v%(7) + 256*256*256*v%(8)
      L%=wi%
      H%=hi%
  END_IF
  FILEBIN_CLOSE 1
return

Quitter:
terminate
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: re   Data Image Creator  D.I.C EmptyMer 29 Aoû 2012 - 17:42

@ Nardo26,

Bien vu ! mon auriculaire à riper sur la touche... Laughing



Edit : tu n'as pas lu l'entête du fichier .... Rolling Eyes (pour x% mais j'avais oublié de mettre y% avec )

Edit 2: pour ce qui est du nom$ je suis d'accord mais pour la reconstruction, je garde ma méthode
( j'ai eu de drôles de surprises avec la tienne...je me suis retrouvé avec le drapeau catalan au lieu du drapeau allemand... Laughing Laughing Laughing )


j'ai du mal à comprendre ton 64
et pourquoi gardes tu la virgule si tu ne gardes pas les données qui étaient placées après
toute tes lignes feront au mini 10 caractères et au maxi 16

data+chr$(34)+0,0,0
data+chr$(34)+255,255,255

scratch scratch scratch
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: re   Data Image Creator  D.I.C EmptyMer 29 Aoû 2012 - 21:07

Tu as coincé "dim ligne$" dans une boucle "for_next"... Laughing Laughing Laughing

Autre chose, les boutons ne se réactivent plus donc y'a un petit Pb avant la fin de la fonction... Wink
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Data Image Creator  D.I.C Empty
MessageSujet: Re: Data Image Creator D.I.C   Data Image Creator  D.I.C EmptyMer 29 Aoû 2012 - 21:16

Exact !
C'est une variable "poubelle" il faut penser à faire un free après en avoir fini avec son utilisation...

pour le 64 :
regarde le code généré :
au lieu d'avoir une ligne DATA pour chaque pixel, j'ai fait en sorte d'avoir une ligne de DATA qui contient au moins (donc parfois plus) 64 caractères...
c'est une valeur empirique, tu peux y mettre ce que tu veux (64,32, largeur de l'image,etc...)
Que tu te retrouve avec un drapeau différent, c'est bizarre... le pb doit venir certainement d'ailleurs (j'ai fait l'essai qu'avec une seule image de sélectionné) et cela n'a rien a voir avec ma méthode.... Wink
En debut de boucle y%, j'initialise :
ligne$="DATA "
a chaque boucle x% je rajoute R,V,B,
donc à un moment donné (lorsque ligne$ a atteint la limite en longueur, 64 caracteres par exemple) je me retrouve avec :
Code:
DATA R1,V1,B1 , ..... , Rn,Vn,Bn,
le dernier caractère de ma ligne se termine par une virgule : c'est pour cette raison que fait un left de len-1
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: re   Data Image Creator  D.I.C EmptyMer 29 Aoû 2012 - 22:03

@ Nardo,

le drapeau catalan vient sûrement d' un savant mélange entre hauteur et largeur ,et x% et y%... Laughing Laughing Laughing

j'ai regardé le fichier généré et je vois mieux le 64... Wink
Je comprends mieux la virgule avec tes explications aussi...

Je viens de reprendre mon code, même si je suis resté sur mon codage / décodage
j'ai changé une boucle "for..." pour une "while..." afin d'ajouter un effet à ma liste.... Laughing

Code:
' Data Image Creator V2 (Version tout panoramic )
' génère un fichier "Include_Image.bas" contenant les images sélectionnés
' sous forme de data et la fonction de recréation de ces images.
' La fonction déclare et libère la plupart de ses propres variables,
' seules les variable x% et y% sont à déclarer dans le source principale et seul la variable
' DI$ (adresse du dossier "auto-créé" où sont recréées les images ) est conservé.
' La fonction à appeler, et à déclarer dans les label,dans l'Init du source pour
' re-créer les images est:Create_File_Image

dim x%,list%,Menu%
dim er$,a$,f$,i%,wi%,hi%
dim v%(20), ii%, offs%, posit%, ad, sz
dim D$,file$,H%,L%,R%,G%,B%,res%,nom$,t%,DO$,y%
' ------------------------------------------------------------------------------
label Init
label Menu,Ajouter,Coder,Get_Size,Quitter
label Effacer
' ------------------------------------------------------------------------------
width 0,320:height 0,250
caption 0,"Data Image Créator Vs0.2":font_name 0,"arial"

main_menu 1
for x%=2 to 4 :sub_menu x% :parent x%,1:on_click x%,Menu:next x%
caption 2,"Ajouter":caption 3,"Coder":caption 4,"Quitter"

list 5:width 5,304:height 5,170:on_double_click 5,Effacer

alpha 6:top 6,172:left 6,20:caption 6,"Double cliquer sur un item pour l'effacer"
font_color 6,140,30,40

gosub Init
end
' ------------------------------------------------------------------------------
Init:
  D$=Dir_current$
  if dir_exists(D$+"\Output")=0 then dir_make D$+"\Output"
  DO$=D$+"\Output"
return
' ------------------------------------------------------------------------------
Menu:
  for x%=2 to 4
      if clicked(x%)=1 then Menu%=x%
  next x%
  select Menu%
  case 2
      gosub Ajouter
  case 3
      inactive 2:inactive 4
      gosub Coder
  case 4
      gosub Quitter
  end_select
return
' ------------------------------------------------------------------------------
Ajouter:
  open_dialog 7
  filter 7,"*.jpg;*.bmp|*.jpg;*.bmp"
  file$=file_name$(7)
  item_add 5,file$
  delete 7
return
' ------------------------------------------------------------------------------
Effacer:
  if count(5)>0 then item_delete 5,item_index(5)
return
' ------------------------------------------------------------------------------
Coder:
  ' ouverture du fichier en création
  file_open_write 8,DO$+"\include_image.bas"
      ' ecriture de la fonction de re-création des fichiers *.bmp
      file_writeln 8,"Create_File_Image:"
      file_writeln 8,"dim DI$,Titre$,haut%,large%,Nbre_lign%,R%,G%,B%,col%,lign%,db%"
      file_writeln 8,"if dir_exists(Dir_current$+"+chr$(34)+"\Picture"+chr$(34)+")=0 then dir_make dir_current$+"+chr$(34)+"\Picture"+chr$(34)
      file_writeln 8,"DI$=Dir_current$+"+chr$(34)+"\Picture"+chr$(34)
      file_writeln 8,"for db%=1 to "+str$(count(5))
      file_writeln 8,"  read Titre$ : read haut% : read large% :read Nbre_lign%"
      file_writeln 8,"  if object_exists(800)=0"
      file_writeln 8,"      form 800:hide 800"
      file_writeln 8,"      command_target_is 800"
      file_writeln 8,"      picture 801"
      file_writeln 8,"  end_if"
      file_writeln 8,"  width 801,large% :height 801,haut% :2d_target_is 801"
      file_writeln 8,"  for x%=1 to Nbre_Lign%"
      file_writeln 8,"      read col% :read lign% :read R% :read G% :read B%"
      file_writeln 8,"      2d_pen_color R%,G%,B%"
      file_writeln 8,"      2d_point col%,lign%"
      file_writeln 8,"  next x%"
      file_writeln 8,"file_save 801,DI$+"+chr$(34)+"\"+chr$(34)+"+titre$"
      file_writeln 8,"cls"
      file_writeln 8,"next db%"
      file_writeln 8,"command_target_is 0"
      file_writeln 8,"Delete 800"
      file_writeln 8,"free Titre$ :free haut% :free large% :free Nbre_lign% "
      file_writeln 8,"free R% :free G% :free B% :free col% :free lign% : free db%"
      file_writeln 8,"return"
      ' ajout des fichiers data à assembler
      while count(5)>0
        ' création du form invible de travail
        if object_exists(100)=0
            form 100:hide 100:command_target_is 100
            picture 101:width 101,L% :height 101,H%
        end_if
        ' placement de l'image chargé dans le picture 101
        file_load 101,item_read$(5,1)
        gosub Get_Size
        ' Ecriture des données
        nom$=file_extract_name$(item_read$(5,1))
        nom$=LEFT$(nom$,len(nom$)-3)+"bmp"
        file_writeln 8,"Data "+chr$(34)+nom$+chr$(34)+","+str$(H%)+","+str$(L%)+","+str$(L%*H%)
        for x%=0 to L% -1
            for y%= 0 to H% -1
              R% =color_pixel_red(101,x%,y%)
              G% =color_pixel_green(101,x%,y%)
              B% =color_pixel_blue(101,x%,y%)
              file_writeln 8,"data "+str$(x%)+","+str$(y%)+","+str$(R%)+","+str$(G%)+","+str$(B%)
            next y%
        next x%
      item_delete 5,1
      end_while
  file_close 8
  clear 5
  active 2:active 4
  command_target_is 0
  if object_exists(100)=1 then delete 100
return
' ------------------------------------------------------------------------------
Get_Size:
  f$=item_read$(5,1)
  er$ = "": a$ = UPPER$(FILE_EXTRACT_EXTENSION$(f$))
  IF a$ <>".JPG" AND a$ <> ".BMP" THEN er$ = "Format incorrect": RETURN

  FILEBIN_OPEN_READ 1, f$: sz = FILEBIN_SIZE(1)
  IF a$ = ".JPG"
      FOR ii% = 1 TO 2: FILEBIN_READ 1, v%(ii%): NEXT ii%
      IF v%(1) <> 255 OR v%(2) <> 216 THEN er$ = "en-tête non FFD8.": GOTO reter
      ad = 0: offs% = 0
      REPEAT
        REPEAT
            posit% = ad + 2 + offs%
            IF posit% >= sz THEN er$ = "FFCx non trouvé.": GOTO reter
            FILEBIN_POSITION 1, posit%
            FOR i% = 1 TO 4: FILEBIN_READ 1, v%(i%): NEXT i%
            IF v%(1) <> 255 THEN er$ = "Chaînage incorrect": GOTO reter
            offs% = 256*v%(3) + v%(4)
            ad = FILEBIN_POS(1) - 4
        UNTIL (v%(2) >= 192 AND v%(2) <= 195): ' # FFC0 à FFC3
        FOR ii% = 1 TO 5: FILEBIN_READ 1, v%(ii%): NEXT ii%
      UNTIL v%(1) = 8
      hi% = 256*v%(2) + v%(3): wi% = 256*v%(4) + v%(5)
      L%=wi%:H%=hi%
  ELSE
      FILEBIN_POSITION 1, 18
      FOR ii% = 1 TO 8: FILEBIN_READ 1, v%(ii%): NEXT ii%
      wi% = v%(1) + 256*v%(2) + 256*256*v%(3) + 256*256*256*v%(4)
      hi% = v%(5) + 256*v%(6) + 256*256*v%(7) + 256*256*256*v%(8)
      L%=wi%
      H%=hi%
  END_IF
  FILEBIN_CLOSE 1
return

Quitter:
terminate


Dernière édition par ygeronimi le Mer 29 Aoû 2012 - 22:48, édité 1 fois (Raison : petite amélioration)
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: re   Data Image Creator  D.I.C EmptyMer 29 Aoû 2012 - 22:12

Le but de cette application est de pouvoir réduire le nombre de fichiers.
L'idée est venue du jeu de l'oie où j'ai besoin de 63 image voir un peu plus pour la déco... Laughing
cela faisait beaucoup de fichiers externes... Laughing
et si tout les data avaient été placé dans le source principale affraid ,
celui ci aurait été très vite illisible... Twisted Evil

là, un #include et le tour est joué... Laughing
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Data Image Creator  D.I.C Empty
MessageSujet: Re: Data Image Creator D.I.C   Data Image Creator  D.I.C EmptyMer 29 Aoû 2012 - 22:28

Une petite remarque :

Je comprend pas pourquoi tu compliques cette ligne :
Code:
 file_writeln 8,"Data"+chr$(32)+nom$+","+str$(H%)+","+str$(L%)+","+str$(L%*H%)
le chr$(32) correspond à un espace donc tu peux écrire :
Code:
 file_writeln 8,"Data "+nom$+","+str$(H%)+","+str$(L%)+","+str$(L%*H%)
Mais il reste quand même un problème.
pour éviter toute ambiguïté avec le nom du fichier (surtout avec les DATA !), tu devrais encadrer le nom du fichier avec des guillemets. De cette manière, tu est sûr que le nom sera "vu" dans sa totalité (surtout si le nom comporte des espaces).
Par exemple si le nom du fichier est "Mon image.jpg", l'espace va faire que ta ligne de data va ressembler à ceci:
Code:
DATA Mon image.jpg,640,400,256000
Pas top, comme résultat... donc ajoute des chr$(34) :
Code:
 file_writeln 8,"Data "+chr$(34)+nom$+chr$(34)+","+str$(H%)+","+str$(L%)+","+str$(L%*H%)
ce qui te donnera :
Code:
DATA "Mon image.jpg",640,400,256000
C'est un peu plus propre... Wink

Une autre remarque:
Je vois pas l’intérêt de stocker la dernière valeur de ton DATA.
Dans l'exemple ci-dessus, le 256000 est le résultat de la multiplication des deux autres valeurs numériques de ta ligne. Dans le programme de "reconstruction" de l'image, après avoir fait un read de L% et de H% tu peux en déduire la taille... Wink


Sinon, concernant ta derniere remarque au sujet de ton jeu:
pourquoi ne pas regrouper toutes tes images en une seule et décomposer par la suite celle-ci en plusieurs éléments ?
Dans ce cas, tu n'auras qu'un seul fichier image...


Revenir en haut Aller en bas
http://nardo26.lescigales.org
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: re   Data Image Creator  D.I.C EmptyMer 29 Aoû 2012 - 22:40

le chr$(32) est un oubli, je l'avais mis sur un bug
pour être sûr de l'espace entre "Data" et la première donnée.

Pour le nom$ entre deux chr$(34), je suis tout à fait d'accord,
j'avais pas envisagé le cas d'un fichier avec espaces dans le nom.

le data avec le nombre de pixels ne me gêne pas, il me sert dans la boucle
que j'écrive comme çà ou que je le calcul après.... n' a que peu d'importance
si ce n'est que de l'avoir dans le fichier me permet de me repérer en cas
de vérif manuelle d'écriture dans ce fichier si j'ai un bug...c'est une convenance personelle.

je vais ré étudier les boucles imbriquées mais tout de suite,
je préfère un peu plus de lignes pour pouvoir faire des vérifs manuelles

là je crée avec des auto-création un fichier qui en crée un autre qui crée des auto-créations.... Laughing Laughing Laughing
le schmilblick est pas simple pour une petite tête comme la mienne... Laughing Laughing Laughing
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: re   Data Image Creator  D.I.C EmptyMer 29 Aoû 2012 - 22:49

chr$(32) supprimé
chr$(34) ajoutés
dans la dernière publication du source
Revenir en haut Aller en bas
Nardo26

Nardo26


Nombre de messages : 2294
Age : 55
Localisation : Valence
Date d'inscription : 02/07/2010

Data Image Creator  D.I.C Empty
MessageSujet: A   Data Image Creator  D.I.C EmptyMer 29 Aoû 2012 - 22:54

Je reviens sur les boucles... Wink

Franchement je vois pas pourquoi tu coinces sur cette histoire de boucles imbriquées...
Par exemple ce code :
Code:

DIM Largeur,Hauteur,R%,G%,B%,Nom$
DIM col%,lign% : ' je reprend les même nom de variable pour que tu comprennes
READ Nom$
READ Largeur: READ Hauteur
FOR lign%=0 TO Hauteur
  FOR col%=0 TO Largeur
    READ R%:READ G%:READ B%
    2D_PEN_COLOR R%,G%;B%
    2D_POINT col%,lign%
  NEXT col%
NEXT lign%

DATA "MonImage.bmp",640,400
DATA 255,255,255,145,154,251,...
...
Au départ, tu lis la largeur et la hauteur
ensuite tu fais une boucle pour faire chaque lign%
et dedans tu traites tous les pixels de cette ligne (largeur) dans une boucle col%

Tu y gagne en taille: pas besoin de stocker les coordonnées de chaque pixel.

Je vois pas où ça coince... ????
Revenir en haut Aller en bas
http://nardo26.lescigales.org
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: re   Data Image Creator  D.I.C EmptyMer 29 Aoû 2012 - 23:22

Mouep, je comprends bien
mais c'est une fois que je l'inclus dans un source
que je finis par faire des noeuds dans les boucles
c'est pas les deux boucles elles mêmes... Laughing

c'est moi, enfin mon cerveau qui bug... Laughing
c'est pas grave je vais intégré ...mais je garde mon pixel par ligne Twisted Evil ,
faut que je puis me repérer quand la bidouille génère le fichier... Laughing
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: re   Data Image Creator  D.I.C EmptyMer 29 Aoû 2012 - 23:49

spécial Nardo26...d'ailleurs çà doit être la 26ème version... Laughing

Code:
' Data Image Creator V2 (Version tout panoramic )
' génère un fichier "Include_Image.bas" contenant les images sélectionnés
' sous forme de data et la fonction de recréation de ces images.
' La fonction déclare et libère la plupart de ses propres variables,
' seules les variable x% et y% sont à déclarer dans le source principale et seul la variable
' DI$ (adresse du dossier "auto-créé" où sont recréées les images ) est conservé.
' La fonction à appeler, et à déclarer dans les label,dans l'Init du source pour
' re-créer les images est:Create_File_Image

dim x%,list%,Menu%
dim er$,a$,f$,i%,wi%,hi%
dim v%(20), ii%, offs%, posit%, ad, sz
dim D$,file$,H%,L%,R%,G%,B%,res%,nom$,t%,DO$,y%
' ------------------------------------------------------------------------------
label Init
label Menu,Ajouter,Coder,Get_Size,Quitter
label Effacer
' ------------------------------------------------------------------------------
width 0,320:height 0,250
caption 0,"Data Image Créator Vs0.2":font_name 0,"arial"

main_menu 1
for x%=2 to 4 :sub_menu x% :parent x%,1:on_click x%,Menu:next x%
caption 2,"Ajouter":caption 3,"Coder":caption 4,"Quitter"

list 5:width 5,304:height 5,170:on_double_click 5,Effacer

alpha 6:top 6,172:left 6,20:caption 6,"Double cliquer sur un item pour l'effacer"
font_color 6,140,30,40

gosub Init
end
' ------------------------------------------------------------------------------
Init:
  D$=Dir_current$
  if dir_exists(D$+"\Output")=0 then dir_make D$+"\Output"
  DO$=D$+"\Output"
return
' ------------------------------------------------------------------------------
Menu:
  for x%=2 to 4
      if clicked(x%)=1 then Menu%=x%
  next x%
  select Menu%
  case 2
      gosub Ajouter
  case 3
      inactive 2:inactive 4
      gosub Coder
  case 4
      gosub Quitter
  end_select
return
' ------------------------------------------------------------------------------
Ajouter:
  open_dialog 7
  filter 7,"*.jpg;*.bmp|*.jpg;*.bmp"
  file$=file_name$(7)
  item_add 5,file$
  delete 7
return
' ------------------------------------------------------------------------------
Effacer:
  if count(5)>0 then item_delete 5,item_index(5)
return
' ------------------------------------------------------------------------------
Coder:
  ' ouverture du fichier en création
  file_open_write 8,DO$+"\include_image.bas"
      ' ecriture de la fonction de re-création des fichiers *.bmp
      file_writeln 8,"Create_File_Image:"
      file_writeln 8,"dim DI$,Titre$,haut%,large%,R%,G%,B%,col%,lign%,db%"
      file_writeln 8,"if dir_exists(Dir_current$+"+chr$(34)+"\Picture"+chr$(34)+")=0 then dir_make dir_current$+"+chr$(34)+"\Picture"+chr$(34)
      file_writeln 8,"DI$=Dir_current$+"+chr$(34)+"\Picture"+chr$(34)
      file_writeln 8,"for db%=1 to "+str$(count(5))
      file_writeln 8,"  read Titre$ : read haut% : read large% "
      file_writeln 8,"  if object_exists(800)=0"
      file_writeln 8,"      form 800:hide 800"
      file_writeln 8,"      command_target_is 800"
      file_writeln 8,"      picture 801"
      file_writeln 8,"  end_if"
      file_writeln 8,"  width 801,large% :height 801,haut% :2d_target_is 801"
      file_writeln 8,"  for x%=0 to large%-1"
      file_writeln 8,"      for y%=0 to haut%-1"
      file_writeln 8,"        read R% :read G% :read B%"
      file_writeln 8,"        2d_pen_color R%,G%,B%"
      file_writeln 8,"        2d_point x%,y%"
      file_writeln 8,"      next y%"
      file_writeln 8,"  next x%"
      file_writeln 8,"file_save 801,DI$+"+chr$(34)+"\"+chr$(34)+"+titre$"
      file_writeln 8,"cls"
      file_writeln 8,"next db%"
      file_writeln 8,"command_target_is 0"
      file_writeln 8,"Delete 800"
      file_writeln 8,"free Titre$ :free haut% :free large% "
      file_writeln 8,"free R% :free G% :free B% :free col% :free lign% : free db%"
      file_writeln 8,"return"
      ' ajout des fichiers data à assembler
      while count(5)>0
        ' création du form invible de travail
        if object_exists(100)=0
            form 100:hide 100:command_target_is 100
            picture 101:width 101,L% :height 101,H%
        end_if
        ' placement de l'image chargé dans le picture 101
        file_load 101,item_read$(5,1)
        gosub Get_Size
        ' Ecriture des données
        nom$=file_extract_name$(item_read$(5,1))
        nom$=LEFT$(nom$,len(nom$)-3)+"bmp"
        file_writeln 8,"Data "+chr$(34)+nom$+chr$(34)+","+str$(H%)+","+str$(L%)
        for x%=0 to L% -1
            for y%= 0 to H% -1
              R% =color_pixel_red(101,x%,y%)
              G% =color_pixel_green(101,x%,y%)
              B% =color_pixel_blue(101,x%,y%)
              file_writeln 8,"data "+str$(R%)+","+str$(G%)+","+str$(B%)
            next y%
        next x%
      item_delete 5,1
      end_while
  file_close 8
  clear 5
  active 2:active 4
  command_target_is 0
  if object_exists(100)=1 then delete 100
return
' ------------------------------------------------------------------------------
Get_Size:
  f$=item_read$(5,1)
  er$ = "": a$ = UPPER$(FILE_EXTRACT_EXTENSION$(f$))
  IF a$ <>".JPG" AND a$ <> ".BMP" THEN er$ = "Format incorrect": RETURN

  FILEBIN_OPEN_READ 1, f$: sz = FILEBIN_SIZE(1)
  IF a$ = ".JPG"
      FOR ii% = 1 TO 2: FILEBIN_READ 1, v%(ii%): NEXT ii%
      IF v%(1) <> 255 OR v%(2) <> 216 THEN er$ = "en-tête non FFD8.": GOTO reter
      ad = 0: offs% = 0
      REPEAT
        REPEAT
            posit% = ad + 2 + offs%
            IF posit% >= sz THEN er$ = "FFCx non trouvé.": GOTO reter
            FILEBIN_POSITION 1, posit%
            FOR i% = 1 TO 4: FILEBIN_READ 1, v%(i%): NEXT i%
            IF v%(1) <> 255 THEN er$ = "Chaînage incorrect": GOTO reter
            offs% = 256*v%(3) + v%(4)
            ad = FILEBIN_POS(1) - 4
        UNTIL (v%(2) >= 192 AND v%(2) <= 195): ' # FFC0 à FFC3
        FOR ii% = 1 TO 5: FILEBIN_READ 1, v%(ii%): NEXT ii%
      UNTIL v%(1) = 8
      hi% = 256*v%(2) + v%(3): wi% = 256*v%(4) + v%(5)
      L%=wi%:H%=hi%
  ELSE
      FILEBIN_POSITION 1, 18
      FOR ii% = 1 TO 8: FILEBIN_READ 1, v%(ii%): NEXT ii%
      wi% = v%(1) + 256*v%(2) + 256*256*v%(3) + 256*256*256*v%(4)
      hi% = v%(5) + 256*v%(6) + 256*256*v%(7) + 256*256*256*v%(8)
      L%=wi%
      H%=hi%
  END_IF
  FILEBIN_CLOSE 1
return

Quitter:
terminate
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: re   Data Image Creator  D.I.C EmptyJeu 30 Aoû 2012 - 2:04

version avec KGF.dll, plus rapide... Laughing

Code:
' Data Image Creator V2 (Version tout panoramic )
' génère un fichier "Include_Image.bas" contenant les images sélectionnés
' sous forme de data et la fonction de recréation de ces images.
' La fonction déclare et libère la plupart de ses propres variables,
' seules les variable x% et y% sont à déclarer dans le source principale et seul la variable
' DI$ (adresse du dossier "auto-créé" où sont recréées les images ) est conservé.
' La fonction à appeler, et à déclarer dans les label,dans l'Init du source pour
' re-créer les images est:Create_File_Image

dim x%,list%,Menu%
dim er$,a$,f$,i%,wi%,hi%
dim v%(20), ii%, offs%, posit%, ad, sz
dim D$,file$,H%,L%,R%,G%,B%,res%,nom$,t%,DO$,y%
' ------------------------------------------------------------------------------
label Init
label Menu,Ajouter,Coder,Get_Size,Quitter
label Effacer
' ------------------------------------------------------------------------------
width 0,320:height 0,250
caption 0,"Data Image Créator Vs0.2":font_name 0,"arial"

main_menu 1
for x%=2 to 4 :sub_menu x% :parent x%,1:on_click x%,Menu:next x%
caption 2,"Ajouter":caption 3,"Coder":caption 4,"Quitter"

list 5:width 5,304:height 5,170:on_double_click 5,Effacer

alpha 6:top 6,172:left 6,20:caption 6,"Double cliquer sur un item pour l'effacer"
font_color 6,140,30,40

gosub Init
end
' ------------------------------------------------------------------------------
Init:
  D$=Dir_current$
  if dir_exists(D$+"\Output")=0 then dir_make D$+"\Output"
  DO$=D$+"\Output"
return
' ------------------------------------------------------------------------------
Menu:
  for x%=2 to 4
      if clicked(x%)=1 then Menu%=x%
  next x%
  select Menu%
  case 2
      gosub Ajouter
  case 3
      inactive 2:inactive 4
      gosub Coder
  case 4
      gosub Quitter
  end_select
return
' ------------------------------------------------------------------------------
Ajouter:
  open_dialog 7
  filter 7,"*.jpg;*.bmp|*.jpg;*.bmp"
  file$=file_name$(7)
  item_add 5,file$
  delete 7
return
' ------------------------------------------------------------------------------
Effacer:
  if count(5)>0 then item_delete 5,item_index(5)
return
' ------------------------------------------------------------------------------
Coder:
  ' ouverture du fichier en création
  file_open_write 8,DO$+"\include_image.bas"
      ' ecriture de la fonction de re-création des fichiers *.bmp
      file_writeln 8,"Create_File_Image:"
      file_writeln 8,"dim DI$,Titre$,haut%,large%,R%,G%,B%,col%,lign%,db%"
      file_writeln 8,"if dir_exists(Dir_current$+"+chr$(34)+"\Picture"+chr$(34)+")=0 then dir_make dir_current$+"+chr$(34)+"\Picture"+chr$(34)
      file_writeln 8,"DI$=Dir_current$+"+chr$(34)+"\Picture"+chr$(34)
      file_writeln 8,"for db%=1 to "+str$(count(5))
      file_writeln 8,"  read Titre$ : read haut% : read large% "
      file_writeln 8,"  if object_exists(800)=0"
      file_writeln 8,"      form 800:hide 800"
      file_writeln 8,"      command_target_is 800"
      file_writeln 8,"      picture 801"
      file_writeln 8,"  end_if"
      file_writeln 8,"  width 801,large% :height 801,haut% :2d_target_is 801"
      file_writeln 8,"  for x%=0 to large%-1"
      file_writeln 8,"      for y%=0 to haut%-1"
      file_writeln 8,"        read R% :read G% :read B%"
      file_writeln 8,"        2d_pen_color R%,G%,B%"
      file_writeln 8,"        2d_point x%,y%"
      file_writeln 8,"      next y%"
      file_writeln 8,"  next x%"
      file_writeln 8,"file_save 801,DI$+"+chr$(34)+"\"+chr$(34)+"+titre$"
      file_writeln 8,"cls"
      file_writeln 8,"next db%"
      file_writeln 8,"command_target_is 0"
      file_writeln 8,"Delete 800"
      file_writeln 8,"free Titre$ :free haut% :free large% "
      file_writeln 8,"free R% :free G% :free B% :free col% :free lign% : free db%"
      file_writeln 8,"return"
      ' ajout des fichiers data à assembler
      while count(5)>0
        ' création du form invible de travail
        if object_exists(100)=0
            form 100:hide 100:command_target_is 100
            picture 101:width 101,L% :height 101,H%
        end_if
        ' placement de l'image chargé dans le picture 101
        file_load 101,item_read$(5,1)
        gosub Get_Size
        ' Ecriture des données
        nom$=file_extract_name$(item_read$(5,1))
        nom$=LEFT$(nom$,len(nom$)-3)+"bmp"
        file_writeln 8,"Data "+chr$(34)+nom$+chr$(34)+","+str$(H%)+","+str$(L%)
        for x%=0 to L% -1
            for y%= 0 to H% -1
              R% =color_pixel_red(101,x%,y%)
              G% =color_pixel_green(101,x%,y%)
              B% =color_pixel_blue(101,x%,y%)
              file_writeln 8,"data "+str$(R%)+","+str$(G%)+","+str$(B%)
            next y%
        next x%
      item_delete 5,1
      end_while
  file_close 8
  clear 5
  active 2:active 4
  command_target_is 0
  if object_exists(100)=1 then delete 100
return
' ------------------------------------------------------------------------------
Get_Size:
  f$=item_read$(5,1)
  dll_on D$+"\KGF.dll"
  res%=dll_call3("AnalyzeImageFile",adr(f$),adr(L%),adr(H%))
  if res%=1
      message "Extension de fichier invalide !"
  else
      message "Largeur: "+str$(L%)+"  Hauteur: "+str$(H%)
  end_if
  dll_off
return

Quitter:
terminate

Edit: dans la fonction Get_Size, il est possible de supprimer le message Largeur + Hauteur. Il est là pour info.


Dernière édition par ygeronimi le Jeu 30 Aoû 2012 - 13:15, édité 1 fois
Revenir en haut Aller en bas
bignono

bignono


Nombre de messages : 1127
Age : 66
Localisation : Val de Marne
Date d'inscription : 13/11/2011

Data Image Creator  D.I.C Empty
MessageSujet: Re: Data Image Creator D.I.C   Data Image Creator  D.I.C EmptyJeu 30 Aoû 2012 - 8:52

Bonjour Ygeronimi, Smile
Ton DIC fonctionne très bien. Par contre, il y a une chose que je ne comprend pas très bien, bien que j'en soupçonne l'explication. J'ai utilisé une de tes images du jeu de l'oie, 5.bmp, le cochon, qui faisait à l'origine 66,2 ko, et une fois passée dans ta moulinette, quand on la reconstruit, là elle fait 87,9 ko!
Je suppose que l'algorithme d'enregistrement des images bmp sous les différents logiciels d'images qui existent n'est pas le même, et qu'il y a une histoire de taux de compression des données aussi? Peut-être que je raconte des bètises aussi, alors dans ce cas, excusez mon ignorance sur le sujet.
Quelqu'un aurait-il une réponse à ma question?
Merci de m'éclairer!
Revenir en haut Aller en bas
Jicehel

Jicehel


Nombre de messages : 5947
Age : 51
Localisation : 77500
Date d'inscription : 18/04/2011

Data Image Creator  D.I.C Empty
MessageSujet: Re: Data Image Creator D.I.C   Data Image Creator  D.I.C EmptyJeu 30 Aoû 2012 - 10:04

Normalement en bmp il n'y a pas de compression à ma connaissance, j'opterais plutôt sur le nombre de bits de l'encodage des couleurs... mais bon, je n'ai pas vérifier. je sais que Panoramic travaille en 24bits. L'image originale était peut-être en 16 bits ?
Revenir en haut Aller en bas
Yannick




Nombre de messages : 8610
Age : 53
Localisation : Bretagne
Date d'inscription : 15/02/2010

Data Image Creator  D.I.C Empty
MessageSujet: re   Data Image Creator  D.I.C EmptyJeu 30 Aoû 2012 - 12:44

Je vous avoue mon incompétence en la matière,

Les images de départ sont en 24 bit c'est sûr je les enregistre avec Paint
pour être sûr qu'elle passe avec Panoramic.


Après comment les sauvegarde Panoramic par "file_save", that is the question... confused



Edit :

En tout cas, merci pour ton commentaire bignono
Revenir en haut Aller en bas
JL35




Nombre de messages : 7095
Localisation : 77
Date d'inscription : 29/11/2007

Data Image Creator  D.I.C Empty
MessageSujet: Re: Data Image Creator D.I.C   Data Image Creator  D.I.C EmptyJeu 30 Aoû 2012 - 14:00

Il suffit de comparer les deux fichiers binaires avant et après pour voir ce qui a été modifié ! Very Happy
(comparer les en-têtes bmp, ça doit suffire).
Revenir en haut Aller en bas
Contenu sponsorisé





Data Image Creator  D.I.C Empty
MessageSujet: Re: Data Image Creator D.I.C   Data Image Creator  D.I.C Empty

Revenir en haut Aller en bas
 
Data Image Creator D.I.C
Revenir en haut 
Page 1 sur 2Aller à la page : 1, 2  Suivant
 Sujets similaires
-
» Mon "ImageList Creator"
» Pano Sub Icon Creator
» Panoramic Data Créateur
» image copy image paste
» mise a jour calculatrice

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
FORUM DE DISCUSSION SUR LE LANGAGE PANORAMIC :: PANORAMIC :: Vos sources, vos utilitaires à partager-
Sauter vers: