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 |
|
|
| extracteur de sprites amélioré | |
| | Auteur | Message |
---|
659_minifly
Nombre de messages : 590 Age : 76 Localisation : Valenciennes Nord Date d'inscription : 29/04/2010
| Sujet: extracteur de sprites amélioré Mer 17 Aoû 2011 - 1:52 | |
| Voici la nouvelle mouture On peut donner n'importe quel angle mais hors de 90, 180, 270 ou inverse on a des trous. - Code:
-
' Programme pour extraire les sprites d'une feuille de sprites ' V1.01 du 10/08/11 créé par 659_minifly et modifié par jicehel ' ' <les touches ' ' "flèche gauche" deplace rectangle à gauche ' "flèche droite" deplace rectangle à droite ' "flèche haut" deplace rectangle vers le haut ' "flèche bas" deplace rectangle vers le bas ' ' "+" agrandit le rectangle par pas de 16 ' "-" reduit le rectangle par pas de 16 ' ' "D" déplace le rectangle de 1 pixel à droite ' "G" déplace le rectangle de 1 pixel à gauche ' "H" déplace le rectangle de 1 pixel vers le haut ' "B" déplace le rectangle de 1 pixel aB " " " Vers le bas ' ' "S" sauvegarde la selection du pixel choisi sous la forme 0001.bmp 0002.bmp etc... ' "F" bascule la couleur du rectangle de Blanc à Noir puis Bleu avant de revenir à Blanc ' hide 0
Label enter_key ,Dess_rect,sauve_sprite,Sub_Reticule_blanc,Sub_Reticule_bleu,Sub_Reticule_Noir Label Sub_B_Plus , Sub_B_moins, Sub_Visualiser
Label Charge_fichier Label Touche_B Label Touche_G Label Touche_H Label Touche_D
Label Touche_B_Fin Label Touche_G_Fin Label Touche_H_Fin Label Touche_D_Fin Label Sub_zoomX2
Dim Pi Dim PI2 Pi=3.1415926535897932 PI2=2*PI Dim Angle_rot Dim Mir_X Dim Mir_Y
Mir_X=1 Mir_Y=1
dim Check_MX dim Check_My Dim Fenetre_01%,Fenetre_02%,Image_01% ,picture01% ,Picture02% Dim i% ,J% ,File_out$,A%,x%,y%
Dim B_Charge
Dim B_Gauche Dim B_Droite Dim B_Haut Dim B_Bas
Dim B_Gauche_Fin Dim B_Droite_Fin Dim B_Haut_Fin Dim B_Bas_Fin Dim B_Plus Dim B_Moins
Dim B_Visualiser Dim B_ZoomX2
Dim Dir_Dial Dim File_nom$
Dim tbl_red(256,256) Dim tbl_green(256,256) Dim tbl_blue(256,256)
Dim Spr_X ,X_Spr Dim Spr_Y,Y_Spr dim fine_X dim fine_y Dim R_rect%, V_rect%, B_rect% Dim Reticule_Blanc,Reticule_Noir,Reticule_Bleu
R_rect% = 255 V_rect% = 255 B_rect% = 255
Dim X1,Y1,X2,Y2,X3,Y3,X4,Y4,X5,Y5
dim xctr,yctr,srcwidth,scrheight,rotation,n,m ,y,x dim Rotation_cos,Rotation_sin
Spr_X = 64 Spr_Y = 64
Dim File_Num File_Num=1000
Dim Inc_X,Inc_Y Inc_X = 0 Inc_Y = 0
fine_X = 0 fine_y = 0 ' ---------------- Fenetres -------------------
Fenetre_01% = 01 Fenetre_02% = 02
' ---------------- Pictures -------------------
picture01% = 13 Picture02% = 14 Reticule_Blanc= 15 Reticule_Noir = 16 Reticule_Bleu = 17 ' ---------------- Images ------------------- Image_01% = 101
' ---------------- Boutons -------------------
B_Charge = 201
B_Gauche = 202 B_Droite = 203 B_Haut = 204 B_Bas = 205
B_Bas_Fin = 206 B_Gauche_Fin = 207 B_Droite_Fin = 208 B_Haut_Fin = 209 B_Bas_Fin = 210 B_Plus = 211 B_Moins = 212 B_Visualiser = 213 B_Zoomx2 = 214 Check_MX = 215 Check_MY = 216 Angle_rot = 217 ' ---------------- Boite repertoire ------------------- Dir_Dial = 301
' ======================================================
Form Fenetre_01% width Fenetre_01%,800 Height Fenetre_01%,600 top Fenetre_01%,0 left Fenetre_01%,0 border_small Fenetre_01%
Form Fenetre_02% width Fenetre_02%,400 Height Fenetre_02%,600 top Fenetre_02%,0 left Fenetre_02%,820 command_target_is Fenetre_02%
open_dialog Dir_Dial ' -------------------------------------------------------------- button B_Charge top B_Charge,10 left B_Charge,50 Caption B_Charge ,"Ouvrir" Button B_Gauche width B_gauche,30 top B_Gauche,150 left B_Gauche,50 Caption B_gauche ,"G" Button B_Droite width B_Droite,30 top B_Droite,150 left B_Droite,110 Caption B_Droite ,"D"
Button B_Haut width B_Haut,30 top B_Haut,120 left B_Haut,80 Caption B_Haut ,"H"
Button B_Bas width B_Bas,30 top B_Bas,180 left B_Bas,80 Caption B_Bas ,"B"
Button B_Gauche_Fin width B_gauche_Fin,20 top B_Gauche_Fin,150 left B_Gauche_Fin,160 Caption B_gauche_Fin ,"G"
Button B_Droite_Fin width B_Droite_Fin,20 top B_Droite_Fin,150 left B_Droite_Fin,220 Caption B_Droite_Fin ,"D"
Button B_Haut_Fin width B_Haut_Fin,20 top B_Haut_Fin,120 left B_Haut_Fin,190 Caption B_Haut_Fin ,"H"
Button B_Bas_Fin width B_Bas_Fin,20 top B_Bas_Fin,180 left B_Bas_Fin,190 Caption B_Bas_Fin ,"B"
Button B_Plus Width B_Plus,20 HEIGHT B_Plus,20 TOP B_Plus, 50 LEFT B_Plus, 50 Caption B_Plus ,"+" Button B_moins Width B_moins,20 HEIGHT B_moins,20 TOP B_moins, 50 LEFT B_moins, 80 Caption B_moins ,"-" Button B_Visualiser
top B_Visualiser,220 left B_Visualiser,50
Caption B_Visualiser,"Visualiser"
Button B_Zoomx2
top B_Zoomx2,250 left B_Zoomx2,50
Caption B_Zoomx2,"ZoomX2"
Check Check_Mx top Check_Mx,220 left Check_Mx,160 Caption Check_Mx,"Mirror X" Check Check_MY top Check_MY,240 left Check_MY,160 Caption Check_MY,"Mirror Y" combo Angle_rot Width Angle_rot,100 top Angle_rot,260 left Angle_rot,160 text Angle_rot,"0" item_add Angle_rot,"0" item_add Angle_rot,"90" item_add Angle_rot,"180" item_add Angle_rot,"-90"
' ------------------------------------------------------------ print_target_is Fenetre_02% print_locate 140,35 Print "Couleur réticule :" PICTURE Reticule_Blanc TOP Reticule_Blanc, 50 LEFT Reticule_Blanc, 150 WIDTH Reticule_Blanc, 20 HEIGHT Reticule_Blanc, 20 HINT Reticule_Blanc, "Reticule Blanc" 2D_TARGET_IS Reticule_Blanc 2D_PEN_COLOR 192,192,192 2D_PEN_WIDTH 2 2D_RECTANGLE 1,1,20,20 2D_PEN_WIDTH 1 2D_PEN_COLOR 255,255,255 2D_FILL_COLOR 255,255,255 2D_RECTANGLE 3,3,17,17
PICTURE Reticule_Bleu TOP Reticule_Bleu, 50 LEFT Reticule_Bleu, 170 WIDTH Reticule_Bleu, 20 HEIGHT Reticule_Bleu, 20 HINT Reticule_Bleu, "Reticule Bleu" 2D_TARGET_IS Reticule_Bleu 2D_PEN_COLOR 192,192,192 2D_PEN_WIDTH 2 2D_RECTANGLE 1,1,20,20 2D_PEN_WIDTH 1 2D_PEN_COLOR 0,0,255 2D_FILL_COLOR 0,0,255 2D_RECTANGLE 3,3,17,17
PICTURE Reticule_noir TOP Reticule_noir, 50 LEFT Reticule_noir, 190 WIDTH Reticule_noir, 20 HEIGHT Reticule_noir, 20 HINT Reticule_noir, "Reticule noir" 2D_TARGET_IS Reticule_noir 2D_PEN_COLOR 192,192,192 2D_PEN_WIDTH 2 2D_RECTANGLE 1,1,20,20 2D_PEN_WIDTH 1 2D_PEN_COLOR 0,0,0 2D_FILL_COLOR 0,0,0 2D_RECTANGLE 3,3,17,17
' ----------------------------------------------------------- command_target_is Fenetre_01%
picture picture01%
width picture01%,800 height picture01%,600 Top picture01%,0 left picture01%,0 command_target_is Fenetre_02%
picture picture02%
width picture02%, Spr_X height picture02%, Spr_Y Top picture02%,400 left picture02%,(300-spr_x)/2
2d_target_is picture01% ' ============================================================================ on_key_down Fenetre_01%,enter_key : ' Fonctions touches
on_click B_Charge,Charge_fichier
on_Click B_Gauche,Touche_G on_Click B_Haut,Touche_H on_Click B_Bas,Touche_B on_Click B_Droite,Touche_D
on_Click B_Gauche_Fin,Touche_G_Fin on_Click B_Haut_Fin,Touche_H_Fin on_Click B_Bas_Fin,Touche_B_Fin on_Click B_Droite_Fin,Touche_D_Fin On_Click Reticule_Blanc,Sub_Reticule_blanc On_Click Reticule_Bleu,Sub_Reticule_bleu On_Click Reticule_Noir,Sub_Reticule_noir On_click B_Plus ,Sub_B_Plus On_Click B_moins,Sub_B_moins On_Click B_Visualiser,Sub_Visualiser on_Click B_Zoomx2,Sub_zoomX2 end
' ---------------------------------- enter_key:
set_focus Fenetre_01% if key_down_code=37 :' Touche fleche Gauche Inc_X=Inc_X-1 GoSub Dess_rect end_if
if key_down_code=38 :' Touche fleche haut Inc_Y=Inc_Y-1 GoSub Dess_rect end_if
if key_down_code=39 :' Touche fleche droite Inc_X=Inc_X+1 GoSub Dess_rect End_If
if key_down_code=40 :' Touche fleche bas Inc_Y=Inc_Y+1 GoSub Dess_rect end_if
if key_down_code=68 :' Touche D deplacement :' fin en X+ fine_X=fine_X+1 GoSub Dess_rect end_if if key_down_code=71 :' Touche G deplacement :' fin en X- fine_X=fine_X-1 GoSub Dess_rect end_if
if key_down_code=66 :' Touche B deplacement :' fin en Y+ fine_Y=fine_Y+1 GoSub Dess_rect end_if
if key_down_code=72 :' Touche H deplacement :' fin en Y- fine_Y=fine_Y-1 GoSub Dess_rect end_if
if key_down_code=86 :' Touche V visualisation :' sprite File_Num=File_Num+1
Gosub Sub_Visualiser
end_if if key_down_code=107 :' Touche + agrandi :' rectangle Spr_X = Spr_X+16 Spr_y = Spr_y+16 X_spr = Spr_X Y_Spr = Spr_Y GoSub Dess_rect end_if
if key_down_code=109 :' Touche - redui :' rectangle Spr_X = Spr_X-16 Spr_y = Spr_y-16 X_spr = Spr_X Y_Spr = Spr_Y GoSub Dess_rect
end_if if key_down_code=70 :' Touche F bascule la ' couleur du rectangle ' Blanc / Noir / Bleu if B_rect% = 255 if R_rect% = 0 R_rect% = 255: V_rect% = 255 : B_rect% = 255 else R_rect% = 0 : V_rect% = 0 : B_rect% = 0 end_if else R_rect% = 0 : V_rect% = 0 : B_rect% = 255 end_if GoSub Dess_rect end_if return
' --------------------------------------------- Sub_Reticule_blanc:
R_rect% = 255 V_rect% = 255 B_rect% = 255 2d_pen_color R_rect%,V_rect%,B_rect% return
Sub_Reticule_bleu:
R_rect% = 0 V_rect% = 0 B_rect% = 255 2d_pen_color R_rect%,V_rect%,B_rect% return Sub_Reticule_Noir:
R_rect% = 0 V_rect% = 0 B_rect% = 0 2d_pen_color R_rect%,V_rect%,B_rect% return ' ----------------------------------- Sub_B_Plus: Spr_X = Spr_X+16 Spr_y = Spr_y+16 X_spr = Spr_X Y_Spr = Spr_Y GoSub Dess_rect return
Sub_B_Moins:
Spr_X = Spr_X-16 Spr_y = Spr_y-16 X_spr = Spr_X Y_Spr = Spr_Y GoSub Dess_rect
Return
' ----------------------------------
Dess_rect:
2d_pen_color R_rect%,V_rect%,B_rect%
file_load picture01%,File_nom$
X1=(Spr_X*Inc_X) Y1=Spr_y*Inc_Y X2=(Spr_X*(Inc_X+1)) Y2=Spr_y*Inc_Y X3=(Spr_X*(Inc_X+1)) Y3=Spr_y*(Inc_Y+1) X4=(Spr_X*Inc_X) Y4=Spr_y*(Inc_Y+1) X5=(Spr_X*Inc_X) Y5=Spr_y*Inc_Y
X1=X1+fine_X Y1=Y1+Fine_Y X2=X2+fine_X Y2=Y2+Fine_Y X3=X3+fine_X Y3=Y3+Fine_Y X4=X4+fine_X Y4=Y4+Fine_Y X5=X5+fine_X Y5=Y5+Fine_Y
2d_poly_from X1,Y1 2d_poly_to X2,Y2 2d_poly_to X3,Y3 2d_poly_to X4,Y4 2d_poly_to X5,Y5
Spr_X=X_Spr Spr_Y=Y_Spr return ' ---------------------------------- Touche_G: Inc_X=Inc_X-1 GoSub Dess_rect
Return Touche_H: Inc_Y=Inc_Y-1 GoSub Dess_rect
Return
Touche_D:
Inc_X=Inc_X+1 GoSub Dess_rect
Return
Touche_B: Inc_Y=Inc_Y+1 GoSub Dess_rect
return ' ------------------------------------------------------------ Touche_G_Fin:
fine_X=fine_X-1 GoSub Dess_rect
Return
Touche_H_Fin:
fine_Y=fine_Y-1 GoSub Dess_rect
Return
Touche_D_Fin:
fine_X=fine_X+1 GoSub Dess_rect
Return
Touche_B_Fin:
fine_Y=fine_Y+1 GoSub Dess_rect
Return ' ---------------------------------- sauve_sprite:
file_load picture01%,File_nom$ for i%=1 to Spr_X-1 for j%=1 to Spr_X-1 tbl_red(i%,j%)=Color_pixel_red(picture01%,x1+j%,y1+i%) tbl_green(i%,j%)=Color_pixel_Green(picture01%,x1+j%,y1+i%) tbl_blue(i%,j%)=Color_pixel_blue(picture01%,x1+j%,y1+i%) next J% next i% width picture02%, Spr_X height picture02%, Spr_Y Top picture02%,400 left picture02%,(300-spr_x)/2
' rotation=(2*3.1415926535897932*90)/360 ' 3.1415926535897932 rotation=val(text$(Angle_rot)) rotation= rotation*PI2/360 if checked(Check_MX)=1 Mir_X=-1 else Mir_X=1 end_if if checked(Check_MY)=1 Mir_Y=-1 else Mir_Y=1 end_if
xctr = Spr_X / 2 yctr = Spr_y / 2 Rotation_Sin=sin(rotation) Rotation_cos=cos(rotation)
color picture02%,0,0,0 2d_target_is picture02% image File_Num
for y=1 to Spr_Y
for x=1 to Spr_X 2d_pen_color tbl_red(y,x),tbl_green(y,x),tbl_blue(y,x)
' Nouveau point du sprite apres rotation
' m = int((x - xctr) * Rotation_cos - (y - yctr) * Rotation_Sin + xctr +.5 )*Mir_X ' n = int((x - xctr) * Rotation_Sin + (y - yctr) * Rotation_cos + yctr +.5 )*Mir_Y ' ********* voici la formule de la rotation d'image ********* m= (xctr+(x-xctr) * Rotation_cos +( Y-xctr)* Rotation_Sin)*Mir_X n= (xctr-(x-xctr) * Rotation_Sin + (Y-xctr)* Rotation_cos)*Mir_Y ' ***************************************************** ' Verification de l'axe de symétrie
iF Mir_X=-1 and Mir_y=1 then 2D_point m+(spr_x),n iF Mir_X=1 and Mir_y=-1 then 2D_point m,n+(Spr_Y) iF Mir_X=-1 and Mir_y=-1 then 2D_point m+(spr_x),n+(Spr_Y) iF Mir_X=1 and Mir_y=1 then 2D_point m,n ' Dessine le point 2D_point m,n next x next y
2d_image_copy File_Num,0,0,Spr_X,Spr_Y i%=len(File_nom$)
File_out$=left$(File_nom$,i%-4)
file_save File_Num,File_out$+str$(File_Num)+".bmp"
2d_target_is picture01% ' Gosub Dess_rect
Return
' ----------------------------------------- Sub_Visualiser:
File_Num=File_Num+1 file_load picture01%,File_nom$
for i%=1 to Spr_X-1 for j%=1 to Spr_X-1
tbl_red(i%,j%)=Color_pixel_red(picture01%,x1+j%,y1+i%) tbl_green(i%,j%)=Color_pixel_Green(picture01%,x1+j%,y1+i%) tbl_blue(i%,j%)=Color_pixel_blue(picture01%,x1+j%,y1+i%)
next J% next i%
width picture02%, Spr_X height picture02%, Spr_Y Top picture02%,400 left picture02%,(300-spr_x)/2
' radian=(2*pi*degree)/360 ' 3.1415926535897932 rotation=val(text$(Angle_rot)) print 0,text$(Angle_rot) rotation= rotation*PI2/360 if checked(Check_MX)=1 Mir_X=-1 else Mir_X=1 end_if if checked(Check_MY)=1 Mir_Y=-1 else Mir_Y=1 end_if
xctr = Spr_X / 2 yctr = Spr_y / 2
Rotation_Sin=sin(rotation) Rotation_cos=cos(rotation)
color picture02%,0,0,0
2d_target_is picture02%
image File_Num
for y=1 to Spr_Y
for x=1 to Spr_X
2d_pen_color tbl_red(y,x),tbl_green(y,x),tbl_blue(y,x)
' Nouveau point du sprite apres rotation
' m = int((x - xctr) * Rotation_cos - (y - yctr) * Rotation_Sin + xctr +.5 )*Mir_X ' n = int((x - xctr) * Rotation_Sin + (y - yctr) * Rotation_cos + yctr +.5 )*Mir_Y
' ********* voici la formule de la rotation d'image ********* m= (xctr+(x-xctr) * Rotation_cos +( Y-xctr)* Rotation_Sin)*Mir_X n= (xctr-(x-xctr) * Rotation_Sin + (Y-xctr)* Rotation_cos)*Mir_Y ' *****************************************************
2d_target_is picture02%
' Verification de l'axe de symétrie
iF Mir_X=-1 and Mir_y=1 then 2D_point m+(spr_x),n iF Mir_X=1 and Mir_y=-1 then 2D_point m,n+(Spr_Y) iF Mir_X=-1 and Mir_y=-1 then 2D_point m+(spr_x),n+(Spr_Y) iF Mir_X=1 and Mir_y=1 then 2D_point m,n
' Dessine le point 2D_point m,n next x next y 2d_image_copy File_Num,0,0,Spr_X,Spr_Y file_save File_Num,"temp.bmp" 2d_target_is picture01% Gosub Dess_rect return ' ----------------------------------------- Sub_zoomX2: left picture02%,(400-(Spr_X*2))/2 width picture02%, Spr_X*2 height picture02%, Spr_Y*2 file_load picture02%,"temp.bmp" stretch_on picture02% Return
' ----------------------------------------- Charge_fichier:
filter Dir_Dial,"SpriteSheet | *.Bmp" rem puis l'utiliser
File_nom$=file_name$(Dir_Dial)
2d_target_is picture01%
file_load picture01%,File_nom$ full_space picture01%
set_focus Fenetre_01%
stretch_on picture01% Return
| |
| | | Jicehel
Nombre de messages : 5947 Age : 52 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: extracteur de sprites amélioré Mer 17 Aoû 2011 - 10:00 | |
| Cool, désolé, je ne fais pas beaucoup de programmation en ce moment, mais j'aime (L'habitude de Facebook en ce moment ^^) . Propositions d'amélioration: - création d'animations des sprites (Créer un fichier "anm" par exemple avec le numéros des images à enchainer et lire les images dans un endroit du programme (genre sous le boutton)) - création optinonnel en même temps que du bmp d'un fichier texte avec les informations sur le sprites (dimensions) et un ligne de commentaire optionnelle (genre usage du sprite)
Dernière édition par Jicehel le Mer 17 Aoû 2011 - 11:06, édité 1 fois | |
| | | 659_minifly
Nombre de messages : 590 Age : 76 Localisation : Valenciennes Nord Date d'inscription : 29/04/2010
| Sujet: Re: extracteur de sprites amélioré Mer 17 Aoû 2011 - 10:07 | |
| j'avais oublié la sauvegarde du sprite et quitter le programme. Chose faites: - Code:
-
' Programme pour extraire les sprites d'une feuille de sprites ' V1.0 du 10/08/11 créé par 659_minifly et modifié par jicehel ' ' <les touches ' ' "flèche gauche" deplace rectangle à gauche ' "flèche droite" deplace rectangle à droite ' "flèche haut" deplace rectangle vers le haut ' "flèche bas" deplace rectangle vers le bas ' ' "+" agrandit le rectangle par pas de 16 ' "-" reduit le rectangle par pas de 16 ' ' "D" déplace le rectangle de 1 pixel à droite ' "G" déplace le rectangle de 1 pixel à gauche ' "H" déplace le rectangle de 1 pixel vers le haut ' "B" déplace le rectangle de 1 pixel aB " " " Vers le bas ' "V" Visualisation du sprite ' "S" sauvegarde la selection du pixel choisi sous la forme 0001.bmp 0002.bmp etc... ' "F" bascule la couleur du rectangle de Blanc à Noir puis Bleu avant de revenir à Blanc ' hide 0
Label enter_key ,Dess_rect,sauve_sprite,Sub_Reticule_blanc,Sub_Reticule_bleu,Sub_Reticule_Noir Label Sub_B_Plus , Sub_B_moins, Sub_Visualiser,Sub_Sauve
Label Charge_fichier Label Touche_B Label Touche_G Label Touche_H Label Touche_D
Label Touche_B_Fin Label Touche_G_Fin Label Touche_H_Fin Label Touche_D_Fin Label Sub_zoomX2 Label sub_Quit
Dim Pi Dim PI2 Pi=3.1415926535897932 PI2=2*PI Dim Angle_rot Dim Mir_X Dim Mir_Y
Mir_X=1 Mir_Y=1
dim Check_MX dim Check_My Dim Fenetre_01%,Fenetre_02%,Image_01% ,picture01% ,Picture02% Dim i% ,J% ,File_out$,A%,x%,y%
Dim B_Charge
Dim B_Gauche Dim B_Droite Dim B_Haut Dim B_Bas
Dim B_Gauche_Fin Dim B_Droite_Fin Dim B_Haut_Fin Dim B_Bas_Fin Dim B_Plus Dim B_Moins
Dim B_Visualiser Dim B_ZoomX2
Dim B_Sauve Dim B_Quit
Dim Dir_Dial Dim File_nom$
Dim tbl_red(256,256) Dim tbl_green(256,256) Dim tbl_blue(256,256)
Dim Spr_X ,X_Spr Dim Spr_Y,Y_Spr dim fine_X dim fine_y Dim R_rect%, V_rect%, B_rect% Dim Reticule_Blanc,Reticule_Noir,Reticule_Bleu
R_rect% = 255 V_rect% = 255 B_rect% = 255
Dim X1,Y1,X2,Y2,X3,Y3,X4,Y4,X5,Y5
dim xctr,yctr,srcwidth,scrheight,rotation,n,m ,y,x dim Rotation_cos,Rotation_sin
Spr_X = 64 Spr_Y = 64
Dim File_Num File_Num=1000
Dim Inc_X,Inc_Y Inc_X = 0 Inc_Y = 0
fine_X = 0 fine_y = 0 ' ---------------- Fenetres -------------------
Fenetre_01% = 01 Fenetre_02% = 02
' ---------------- Pictures -------------------
picture01% = 13 Picture02% = 14 Reticule_Blanc= 15 Reticule_Noir = 16 Reticule_Bleu = 17 ' ---------------- Images ------------------- Image_01% = 101
' ---------------- Boutons -------------------
B_Charge = 201
B_Gauche = 202 B_Droite = 203 B_Haut = 204 B_Bas = 205
B_Bas_Fin = 206 B_Gauche_Fin = 207 B_Droite_Fin = 208 B_Haut_Fin = 209 B_Bas_Fin = 210 B_Plus = 211 B_Moins = 212 B_Visualiser = 213 B_Zoomx2 = 214 Check_MX = 215 Check_MY = 216 Angle_rot = 217 B_sauve = 218 B_Quit = 219 ' ---------------- Boite repertoire ------------------- Dir_Dial = 301
' ======================================================
Form Fenetre_01% width Fenetre_01%,800 Height Fenetre_01%,600 top Fenetre_01%,0 left Fenetre_01%,0 border_small Fenetre_01%
Form Fenetre_02% width Fenetre_02%,400 Height Fenetre_02%,600 top Fenetre_02%,0 left Fenetre_02%,820 command_target_is Fenetre_02%
open_dialog Dir_Dial ' -------------------------------------------------------------- button B_Charge top B_Charge,10 left B_Charge,50 Caption B_Charge ,"Ouvrir" Button B_Gauche width B_gauche,30 top B_Gauche,150 left B_Gauche,50 Caption B_gauche ,"G" Button B_Droite width B_Droite,30 top B_Droite,150 left B_Droite,110 Caption B_Droite ,"D"
Button B_Haut width B_Haut,30 top B_Haut,120 left B_Haut,80 Caption B_Haut ,"H"
Button B_Bas width B_Bas,30 top B_Bas,180 left B_Bas,80 Caption B_Bas ,"B"
Button B_Gauche_Fin width B_gauche_Fin,20 top B_Gauche_Fin,150 left B_Gauche_Fin,160 Caption B_gauche_Fin ,"G"
Button B_Droite_Fin width B_Droite_Fin,20 top B_Droite_Fin,150 left B_Droite_Fin,220 Caption B_Droite_Fin ,"D"
Button B_Haut_Fin width B_Haut_Fin,20 top B_Haut_Fin,120 left B_Haut_Fin,190 Caption B_Haut_Fin ,"H"
Button B_Bas_Fin width B_Bas_Fin,20 top B_Bas_Fin,180 left B_Bas_Fin,190 Caption B_Bas_Fin ,"B"
Button B_Plus Width B_Plus,20 HEIGHT B_Plus,20 TOP B_Plus, 50 LEFT B_Plus, 50 Caption B_Plus ,"+" Button B_moins Width B_moins,20 HEIGHT B_moins,20 TOP B_moins, 50 LEFT B_moins, 80 Caption B_moins ,"-" Button B_Visualiser
top B_Visualiser,220 left B_Visualiser,50
Caption B_Visualiser,"Visualiser"
Button B_Zoomx2
top B_Zoomx2,250 left B_Zoomx2,50
Caption B_Zoomx2,"ZoomX2"
Check Check_Mx top Check_Mx,220 left Check_Mx,160 Caption Check_Mx,"Mirror X" Check Check_MY top Check_MY,240 left Check_MY,160 Caption Check_MY,"Mirror Y" combo Angle_rot Width Angle_rot,100 top Angle_rot,260 left Angle_rot,160 text Angle_rot,"0" item_add Angle_rot,"0" item_add Angle_rot,"90" item_add Angle_rot,"180" item_add Angle_rot,"-90"
Button B_Sauve Top B_Sauve,220 Left B_sauve,300 Caption B_Sauve,"Sauvegarde" Button B_Quit Top B_Quit,250 Left B_Quit,300 Caption B_Quit,"Quitte" ' ------------------------------------------------------------ print_target_is Fenetre_02% print_locate 140,35 Print "Couleur réticule :" PICTURE Reticule_Blanc TOP Reticule_Blanc, 50 LEFT Reticule_Blanc, 150 WIDTH Reticule_Blanc, 20 HEIGHT Reticule_Blanc, 20 HINT Reticule_Blanc, "Reticule Blanc" 2D_TARGET_IS Reticule_Blanc 2D_PEN_COLOR 192,192,192 2D_PEN_WIDTH 2 2D_RECTANGLE 1,1,20,20 2D_PEN_WIDTH 1 2D_PEN_COLOR 255,255,255 2D_FILL_COLOR 255,255,255 2D_RECTANGLE 3,3,17,17
PICTURE Reticule_Bleu TOP Reticule_Bleu, 50 LEFT Reticule_Bleu, 170 WIDTH Reticule_Bleu, 20 HEIGHT Reticule_Bleu, 20 HINT Reticule_Bleu, "Reticule Bleu" 2D_TARGET_IS Reticule_Bleu 2D_PEN_COLOR 192,192,192 2D_PEN_WIDTH 2 2D_RECTANGLE 1,1,20,20 2D_PEN_WIDTH 1 2D_PEN_COLOR 0,0,255 2D_FILL_COLOR 0,0,255 2D_RECTANGLE 3,3,17,17
PICTURE Reticule_noir TOP Reticule_noir, 50 LEFT Reticule_noir, 190 WIDTH Reticule_noir, 20 HEIGHT Reticule_noir, 20 HINT Reticule_noir, "Reticule noir" 2D_TARGET_IS Reticule_noir 2D_PEN_COLOR 192,192,192 2D_PEN_WIDTH 2 2D_RECTANGLE 1,1,20,20 2D_PEN_WIDTH 1 2D_PEN_COLOR 0,0,0 2D_FILL_COLOR 0,0,0 2D_RECTANGLE 3,3,17,17
' ----------------------------------------------------------- command_target_is Fenetre_01%
picture picture01%
width picture01%,800 height picture01%,600 Top picture01%,0 left picture01%,0 command_target_is Fenetre_02%
picture picture02%
width picture02%, Spr_X height picture02%, Spr_Y Top picture02%,400 left picture02%,(300-spr_x)/2
2d_target_is picture01% ' ============================================================================ on_key_down Fenetre_01%,enter_key : ' Fonctions touches
on_click B_Charge,Charge_fichier
on_Click B_Gauche,Touche_G on_Click B_Haut,Touche_H on_Click B_Bas,Touche_B on_Click B_Droite,Touche_D
on_Click B_Gauche_Fin,Touche_G_Fin on_Click B_Haut_Fin,Touche_H_Fin on_Click B_Bas_Fin,Touche_B_Fin on_Click B_Droite_Fin,Touche_D_Fin On_Click Reticule_Blanc,Sub_Reticule_blanc On_Click Reticule_Bleu,Sub_Reticule_bleu On_Click Reticule_Noir,Sub_Reticule_noir On_click B_Plus ,Sub_B_Plus On_Click B_moins,Sub_B_moins On_Click B_Visualiser,Sub_Visualiser on_Click B_Zoomx2,Sub_zoomX2 On_click B_Sauve,sub_Sauve On_click B_Quit,sub_Quit end
' ---------------------------------- enter_key:
set_focus Fenetre_01% if key_down_code=37 :' Touche fleche Gauche Inc_X=Inc_X-1 GoSub Dess_rect end_if
if key_down_code=38 :' Touche fleche haut Inc_Y=Inc_Y-1 GoSub Dess_rect end_if
if key_down_code=39 :' Touche fleche droite Inc_X=Inc_X+1 GoSub Dess_rect End_If
if key_down_code=40 :' Touche fleche bas Inc_Y=Inc_Y+1 GoSub Dess_rect end_if
if key_down_code=68 :' Touche D deplacement :' fin en X+ fine_X=fine_X+1 GoSub Dess_rect end_if if key_down_code=71 :' Touche G deplacement :' fin en X- fine_X=fine_X-1 GoSub Dess_rect end_if
if key_down_code=66 :' Touche B deplacement :' fin en Y+ fine_Y=fine_Y+1 GoSub Dess_rect end_if
if key_down_code=72 :' Touche H deplacement :' fin en Y- fine_Y=fine_Y-1 GoSub Dess_rect end_if
if key_down_code=83 :' Touche S sauve image :'
GoSub Sub_Sauve end_if
if key_down_code=86 :' Touche V visualisation :' sprite File_Num=File_Num+1
Gosub Sub_Visualiser
end_if if key_down_code=107 :' Touche + agrandi :' rectangle Spr_X = Spr_X+16 Spr_y = Spr_y+16 X_spr = Spr_X Y_Spr = Spr_Y GoSub Dess_rect end_if
if key_down_code=109 :' Touche - redui :' rectangle Spr_X = Spr_X-16 Spr_y = Spr_y-16 X_spr = Spr_X Y_Spr = Spr_Y GoSub Dess_rect
end_if if key_down_code=70 :' Touche F bascule la ' couleur du rectangle ' Blanc / Noir / Bleu if B_rect% = 255 if R_rect% = 0 R_rect% = 255: V_rect% = 255 : B_rect% = 255 else R_rect% = 0 : V_rect% = 0 : B_rect% = 0 end_if else R_rect% = 0 : V_rect% = 0 : B_rect% = 255 end_if GoSub Dess_rect end_if return
' --------------------------------------------- Sub_Reticule_blanc:
R_rect% = 255 V_rect% = 255 B_rect% = 255 2d_pen_color R_rect%,V_rect%,B_rect% return
Sub_Reticule_bleu:
R_rect% = 0 V_rect% = 0 B_rect% = 255 2d_pen_color R_rect%,V_rect%,B_rect% return Sub_Reticule_Noir:
R_rect% = 0 V_rect% = 0 B_rect% = 0 2d_pen_color R_rect%,V_rect%,B_rect% return ' ----------------------------------- Sub_B_Plus: Spr_X = Spr_X+16 Spr_y = Spr_y+16 X_spr = Spr_X Y_Spr = Spr_Y GoSub Dess_rect return
Sub_B_Moins:
Spr_X = Spr_X-16 Spr_y = Spr_y-16 X_spr = Spr_X Y_Spr = Spr_Y GoSub Dess_rect
Return
' ----------------------------------
Dess_rect:
2d_pen_color R_rect%,V_rect%,B_rect%
file_load picture01%,File_nom$
X1=(Spr_X*Inc_X) Y1=Spr_y*Inc_Y X2=(Spr_X*(Inc_X+1)) Y2=Spr_y*Inc_Y X3=(Spr_X*(Inc_X+1)) Y3=Spr_y*(Inc_Y+1) X4=(Spr_X*Inc_X) Y4=Spr_y*(Inc_Y+1) X5=(Spr_X*Inc_X) Y5=Spr_y*Inc_Y
X1=X1+fine_X Y1=Y1+Fine_Y X2=X2+fine_X Y2=Y2+Fine_Y X3=X3+fine_X Y3=Y3+Fine_Y X4=X4+fine_X Y4=Y4+Fine_Y X5=X5+fine_X Y5=Y5+Fine_Y
2d_poly_from X1,Y1 2d_poly_to X2,Y2 2d_poly_to X3,Y3 2d_poly_to X4,Y4 2d_poly_to X5,Y5
Spr_X=X_Spr Spr_Y=Y_Spr return ' ---------------------------------- Touche_G: Inc_X=Inc_X-1 GoSub Dess_rect
Return Touche_H: Inc_Y=Inc_Y-1 GoSub Dess_rect
Return
Touche_D:
Inc_X=Inc_X+1 GoSub Dess_rect
Return
Touche_B: Inc_Y=Inc_Y+1 GoSub Dess_rect
return ' ------------------------------------------------------------ Touche_G_Fin:
fine_X=fine_X-1 GoSub Dess_rect
Return
Touche_H_Fin:
fine_Y=fine_Y-1 GoSub Dess_rect
Return
Touche_D_Fin:
fine_X=fine_X+1 GoSub Dess_rect
Return
Touche_B_Fin:
fine_Y=fine_Y+1 GoSub Dess_rect
Return ' ---------------------------------- sauve_sprite:
file_load picture01%,File_nom$ for i%=1 to Spr_X-1 for j%=1 to Spr_X-1 tbl_red(i%,j%)=Color_pixel_red(picture01%,x1+j%,y1+i%) tbl_green(i%,j%)=Color_pixel_Green(picture01%,x1+j%,y1+i%) tbl_blue(i%,j%)=Color_pixel_blue(picture01%,x1+j%,y1+i%) next J% next i% width picture02%, Spr_X height picture02%, Spr_Y Top picture02%,400 left picture02%,(300-spr_x)/2
' rotation=(2*3.1415926535897932*90)/360 ' 3.1415926535897932 rotation=val(text$(Angle_rot)) rotation= rotation*PI2/360 if checked(Check_MX)=1 Mir_X=-1 else Mir_X=1 end_if if checked(Check_MY)=1 Mir_Y=-1 else Mir_Y=1 end_if
xctr = Spr_X / 2 yctr = Spr_y / 2 Rotation_Sin=sin(rotation) Rotation_cos=cos(rotation)
color picture02%,0,0,0 2d_target_is picture02% image File_Num
for y=1 to Spr_Y
for x=1 to Spr_X 2d_pen_color tbl_red(y,x),tbl_green(y,x),tbl_blue(y,x)
' Nouveau point du sprite apres rotation
' m = int((x - xctr) * Rotation_cos - (y - yctr) * Rotation_Sin + xctr +.5 )*Mir_X ' n = int((x - xctr) * Rotation_Sin + (y - yctr) * Rotation_cos + yctr +.5 )*Mir_Y ' ********* voici la formule de la rotation d'image ********* m= (xctr+(x-xctr) * Rotation_cos +( Y-xctr)* Rotation_Sin)*Mir_X n= (xctr-(x-xctr) * Rotation_Sin + (Y-xctr)* Rotation_cos)*Mir_Y ' ***************************************************** ' Verification de l'axe de symétrie
iF Mir_X=-1 and Mir_y=1 then 2D_point m+(spr_x),n iF Mir_X=1 and Mir_y=-1 then 2D_point m,n+(Spr_Y) iF Mir_X=-1 and Mir_y=-1 then 2D_point m+(spr_x),n+(Spr_Y) iF Mir_X=1 and Mir_y=1 then 2D_point m,n ' Dessine le point 2D_point m,n next x next y
2d_image_copy File_Num,0,0,Spr_X,Spr_Y i%=len(File_nom$)
File_out$=left$(File_nom$,i%-4)
file_save File_Num,File_out$+str$(File_Num)+".bmp"
2d_target_is picture01% ' Gosub Dess_rect
Return
' ----------------------------------------- Sub_Visualiser:
File_Num=File_Num+1 file_load picture01%,File_nom$
for i%=1 to Spr_X-1 for j%=1 to Spr_X-1
tbl_red(i%,j%)=Color_pixel_red(picture01%,x1+j%,y1+i%) tbl_green(i%,j%)=Color_pixel_Green(picture01%,x1+j%,y1+i%) tbl_blue(i%,j%)=Color_pixel_blue(picture01%,x1+j%,y1+i%)
next J% next i%
width picture02%, Spr_X height picture02%, Spr_Y Top picture02%,400 left picture02%,(300-spr_x)/2
' radian=(2*pi*degree)/360 ' 3.1415926535897932 rotation=val(text$(Angle_rot)) rotation= rotation*PI2/360 if checked(Check_MX)=1 Mir_X=-1 else Mir_X=1 end_if if checked(Check_MY)=1 Mir_Y=-1 else Mir_Y=1 end_if
xctr = Spr_X / 2 yctr = Spr_y / 2
Rotation_Sin=sin(rotation) Rotation_cos=cos(rotation)
color picture02%,0,0,0
2d_target_is picture02%
image File_Num
for y=1 to Spr_Y
for x=1 to Spr_X
2d_pen_color tbl_red(y,x),tbl_green(y,x),tbl_blue(y,x)
' Nouveau point du sprite apres rotation
' m = int((x - xctr) * Rotation_cos - (y - yctr) * Rotation_Sin + xctr +.5 )*Mir_X ' n = int((x - xctr) * Rotation_Sin + (y - yctr) * Rotation_cos + yctr +.5 )*Mir_Y
' ********* voici la formule de la rotation d'image ********* m= (xctr+(x-xctr) * Rotation_cos +( Y-xctr)* Rotation_Sin)*Mir_X n= (xctr-(x-xctr) * Rotation_Sin + (Y-xctr)* Rotation_cos)*Mir_Y ' *****************************************************
2d_target_is picture02%
' Verification de l'axe de symétrie
iF Mir_X=-1 and Mir_y=1 then 2D_point m+(spr_x),n iF Mir_X=1 and Mir_y=-1 then 2D_point m,n+(Spr_Y) iF Mir_X=-1 and Mir_y=-1 then 2D_point m+(spr_x),n+(Spr_Y) iF Mir_X=1 and Mir_y=1 then 2D_point m,n
' Dessine le point 2D_point m,n next x next y 2d_image_copy File_Num,0,0,Spr_X,Spr_Y file_save File_Num,"temp.bmp" 2d_target_is picture01% Gosub Dess_rect return ' ----------------------------------------- Sub_zoomX2: left picture02%,(400-(Spr_X*2))/2 width picture02%, Spr_X*2 height picture02%, Spr_Y*2 file_load picture02%,"temp.bmp" stretch_on picture02% Return
' ----------------------------------------- Charge_fichier:
filter Dir_Dial,"SpriteSheet | *.Bmp" rem puis l'utiliser
File_nom$=file_name$(Dir_Dial)
2d_target_is picture01%
file_load picture01%,File_nom$ full_space picture01%
set_focus Fenetre_01%
stretch_on picture01% Return
Sub_Sauve:
i%=len(File_nom$)
File_out$=left$(File_nom$,i%-4)
file_save File_Num,File_out$+str$(File_Num)+".bmp"
2d_target_is picture01%
Return
Sub_Quit:
Terminate
return
| |
| | | Contenu sponsorisé
| Sujet: Re: extracteur de sprites amélioré | |
| |
| | | | extracteur de sprites amélioré | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |