Novembre 2024 | Lun | Mar | Mer | Jeu | Ven | Sam | Dim |
---|
| | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | | Calendrier |
|
|
| Data Image Creator D.I.C | |
| | |
Auteur | Message |
---|
Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Data Image Creator D.I.C Ven 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... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: Amélioration Sam 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... 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) | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Data Image Creator D.I.C Sam 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 | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 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... | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Data Image Creator D.I.C Sam 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...) | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| | | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Sam 25 Aoû 2012 - 19:06 | |
| | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: nouvelle version Mer 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) | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Data Image Creator D.I.C Mer 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 remplace ton HIDE 101 par HIDE 100 ça marchera mieux... 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é - 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
| |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 29 Aoû 2012 - 17:42 | |
| @ Nardo26, Bien vu ! mon auriculaire à riper sur la touche... Edit : tu n'as pas lu l'entête du fichier .... (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... ) 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 | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 29 Aoû 2012 - 21:07 | |
| | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Data Image Creator D.I.C Mer 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.... 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 | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 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%... j'ai regardé le fichier généré et je vois mieux le 64... 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.... - 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) | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 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... cela faisait beaucoup de fichiers externes... et si tout les data avaient été placé dans le source principale , celui ci aurait été très vite illisible... là, un #include et le tour est joué... | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: Re: Data Image Creator D.I.C Mer 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... 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... 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... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 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.... le schmilblick est pas simple pour une petite tête comme la mienne... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 29 Aoû 2012 - 22:49 | |
| chr$(32) supprimé chr$(34) ajoutés dans la dernière publication du source | |
| | | Nardo26
Nombre de messages : 2294 Age : 56 Localisation : Valence Date d'inscription : 02/07/2010
| Sujet: A Mer 29 Aoû 2012 - 22:54 | |
| Je reviens sur les boucles... 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... ???? | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 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... c'est moi, enfin mon cerveau qui bug... c'est pas grave je vais intégré ...mais je garde mon pixel par ligne , faut que je puis me repérer quand la bidouille génère le fichier... | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Mer 29 Aoû 2012 - 23:49 | |
| spécial Nardo26...d'ailleurs çà doit être la 26ème version... - 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 | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 30 Aoû 2012 - 2:04 | |
| version avec KGF.dll, plus rapide... - 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 | |
| | | bignono
Nombre de messages : 1127 Age : 67 Localisation : Val de Marne Date d'inscription : 13/11/2011
| Sujet: Re: Data Image Creator D.I.C Jeu 30 Aoû 2012 - 8:52 | |
| Bonjour Ygeronimi, 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! | |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Data Image Creator D.I.C Jeu 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 ? | |
| | | Yannick
Nombre de messages : 8635 Age : 53 Localisation : Bretagne Date d'inscription : 15/02/2010
| Sujet: re Jeu 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... Edit : En tout cas, merci pour ton commentaire bignono | |
| | | JL35
Nombre de messages : 7112 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Data Image Creator D.I.C Jeu 30 Aoû 2012 - 14:00 | |
| Il suffit de comparer les deux fichiers binaires avant et après pour voir ce qui a été modifié ! (comparer les en-têtes bmp, ça doit suffire). | |
| | | Contenu sponsorisé
| Sujet: Re: Data Image Creator D.I.C | |
| |
| | | | Data Image Creator D.I.C | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |