Structure myFontData x.l y.l Width.l Height.l EndStructure Structure BitmapFont SpriteId.i AsciiStart.c AsciiEnd.c Array FontData.myFontData(1) EndStructure Global NewList BitmapFont.BitmapFont() Global Dim FinalFont.myFontData(1) Enumeration #Win_Main #Gdt_Canvas #Gdt_Marg #Gdt_Save EndEnumeration Procedure MyLoadFont(Font.l,Name.s,Size.l,Flag=0) Taille=1; Img=CreateImage(#PB_Any,1,1);Creation d'une image pour travailler Repeat If IsFont(Font) FreeFont(Font) EndIf Taille+1 LoadFont(Font, Name, Taille,Flag) StartDrawing(ImageOutput(Img)) DrawingFont(FontID(Font)) If TextHeight("@")>Size Or TextWidth("@")>Size Taille-1 Quit=1 EndIf StopDrawing() Until Quit=1 Or Taille>500 Debug "Taille="+Str(Taille) FreeImage(Img) EndProcedure Procedure SelectFont(*BitmapFont.BitmapFont) Police$ = "Arial" ; Police initiale (peut aussi être nulle) TaillePolice = 96 ; Taille initiale (peut aussi être nulle) Resultat = FontRequester(Police$, TaillePolice, #PB_FontRequester_Effects) If Resultat Debug SelectedFontName() MyLoadFont(0,SelectedFontName(),SelectedFontSize(),SelectedFontStyle()) EndIf *BitmapFont\AsciiStart=32 *BitmapFont\AsciiEnd=122 ReDim *BitmapFont\FontData(*BitmapFont\AsciiEnd-*BitmapFont\AsciiStart) Debug "ArraySize="+Str(ArraySize(*BitmapFont\FontData())) EndProcedure Procedure RefreshImage(*BitmapFont.BitmapFont,WithBorder.b=#True) Marg=GetGadgetState(#Gdt_Marg) If IsImage(*BitmapFont\SpriteId):FreeImage(*BitmapFont\SpriteId):EndIf If IsFont(0) Protected.l MaxWidth=0,MaxHeight=0 *BitmapFont\SpriteId=CreateImage(#PB_Any,96*10,96*10,32,#PB_Image_Transparent) StartDrawing(ImageOutput(*BitmapFont\SpriteId)) DrawingFont(FontID(0)) Debug "___" Debug *BitmapFont\AsciiStart Debug *BitmapFont\AsciiEnd Debug "___" For a=*BitmapFont\AsciiStart To *BitmapFont\AsciiEnd c=a-*BitmapFont\AsciiStart *BitmapFont\FontData(c)\Width=TextWidth(Chr(a)) Debug Str(a)+" width="+Str(TextWidth(Chr(a))) *BitmapFont\FontData(c)\Height=TextHeight(Chr(a)) If *BitmapFont\FontData(c)\Width>MaxWidth:MaxWidth=*BitmapFont\FontData(c)\Width:EndIf If *BitmapFont\FontData(c)\Height>MaxHeight:MaxHeight=*BitmapFont\FontData(c)\Height:EndIf Next Debug MaxWidth Debug MaxHeight Else Debug "ERRROR" EndIf StopDrawing() If MaxWidth>MaxHeight Max=MaxWidth Else Max=MaxHeight EndIf StartDrawing(ImageOutput(*BitmapFont\SpriteId)) DrawingFont(FontID(font)) x.l=0:y.l=0 ReDim FinalFont(*BitmapFont\AsciiEnd-*BitmapFont\AsciiStart) ;Dim finalFont.myFontData(90) For a=*BitmapFont\AsciiStart To *BitmapFont\AsciiEnd c=a-*BitmapFont\AsciiStart If x+*BitmapFont\FontData(c)\Width+Marg*2>ImageWidth(*BitmapFont\SpriteId) x=0:Y=Y+MaxHeight+Marg*2 EndIf If WithBorder=#True DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Outlined ) Box(x,y,*BitmapFont\FontData(c)\Width+Marg*2,Max+Marg*2,RGBA(0,255,0,128)) ;Line(x+Marg+*BitmapFont\FontData(c)\Width,y,1,Max,RGBA(255,0,0,200)) EndIf DrawingMode(#PB_2DDrawing_Transparent|#PB_2DDrawing_AlphaBlend) DrawText(x+Marg,y+Marg,Chr(a),RGBA(255,255,255,255)) finalFont(c)\x=x finalFont(c)\y=y finalFont(c)\Width=*BitmapFont\FontData(c)\Width+Marg*2 finalFont(c)\Height=MaxHeight+Marg*2 x=x+*BitmapFont\FontData(c)\Width+Marg*2 Next Y=Y+MaxHeight+Marg*2 Line(0,Y,ImageWidth(*BitmapFont\SpriteId),1,RGBA(255,0,0,255)) StopDrawing() StartDrawing(CanvasOutput(#Gdt_Canvas)) DrawImage(ImageID(*BitmapFont\SpriteId),0,0,768,768) StopDrawing() EndProcedure If OpenWindow(#Win_Main, 0, 0, 1024, 768, "Thy Font Bitmap Creator", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) CanvasGadget(#Gdt_Canvas, 0, 0, 768, 768) SpinGadget(#Gdt_Marg, 800, 10, 100, 25, 0,50,#PB_Spin_Numeric ) ButtonGadget(#Gdt_Save,800,740,75,25,"Save") *f.BitmapFont=AddElement(BitmapFont()) SelectFont(*f) RefreshImage(*f) Repeat Event = WaitWindowEvent() Select Event Case #PB_Event_Gadget Select EventGadget() Case #Gdt_Marg RefreshImage(*f) Case #Gdt_Save RefreshImage(*f,#False) SaveImage(BitmapFont()\SpriteId,"FontsCompress.png",#PB_ImagePlugin_ ) If CreateFile(0,"FontsCompress.dat") WriteCharacter(0,BitmapFont()\AsciiStart,#PB_Ascii) WriteCharacter(0,BitmapFont()\AsciiEnd,#PB_Ascii) WriteData(0,@finalFont(),SizeOf(myFontData)*ArraySize(finalFont())) CloseFile(0) EndIf EndSelect EndSelect Until Event = #PB_Event_CloseWindow CloseWindow(0) EndIf ; IDE Options = PureBasic 6.00 Beta 5 (Windows - x64) ; CursorPosition = 146 ; FirstLine = 88 ; Folding = - ; EnableXP