Bitmap Fontsystem , comment ça marche ?
Bitmap Fontsystem , comment ça marche ?
J'ai vu un super éditeur sur le forum anglais
http://www.purebasicforums.com/english/ ... hp?t=14415
ça me semble plutôt bien , mais je n'arrive pas colorer les caractères comme dans les fichiers exemple , quelqu'un sait comment il faut faire ??
je n'ose pas demander à son auteur , mon anglais est tellement faible que j'aurais du mal à exprimer mon problème.
http://www.purebasicforums.com/english/ ... hp?t=14415
ça me semble plutôt bien , mais je n'arrive pas colorer les caractères comme dans les fichiers exemple , quelqu'un sait comment il faut faire ??
je n'ose pas demander à son auteur , mon anglais est tellement faible que j'aurais du mal à exprimer mon problème.
Salut,
J'ai testé le truc et je ne pense pas que ceux soit un éditeur au sens ou tu l'attends. Tu ne peux pas dessiner les caractères avec. D'aprés ce que j'ai compris, tu dessines au préalable tout tes caractères dans un logiciel de dessin classique, et tu importes l'image dans l'editeur. Ensuite tu fais cadrer tes caractères dans chaque case, tu y associe un code ascii et ca te sort un fichier texte associé à ton image avec la position des lettres sur l'image et les codes associés. Le tout en vu de l'exploiter dans PB.
Enfin c'est que j'ai compris...
J'ai testé le truc et je ne pense pas que ceux soit un éditeur au sens ou tu l'attends. Tu ne peux pas dessiner les caractères avec. D'aprés ce que j'ai compris, tu dessines au préalable tout tes caractères dans un logiciel de dessin classique, et tu importes l'image dans l'editeur. Ensuite tu fais cadrer tes caractères dans chaque case, tu y associe un code ascii et ca te sort un fichier texte associé à ton image avec la position des lettres sur l'image et les codes associés. Le tout en vu de l'exploiter dans PB.
Enfin c'est que j'ai compris...

oui c'est ce que je commençais à soupçonner
mais tu n'as pas à dessiner au préalable tes caractères dans un logiciel de dessin .
Ce logiciel te permet justement de générer un fichier bitmap à partir d'une police .Mais ensuite , il faut travailler la couleur de ce bitmap avec un logiciel de dessin ? dommage .
Enfin , de pouvoir créer la planche de caractères facilement ,c'est déjà pas si mal que ça
quand on voit les planches qu'il propose , il y a déjà de bons résultats .

mais tu n'as pas à dessiner au préalable tes caractères dans un logiciel de dessin .
Ce logiciel te permet justement de générer un fichier bitmap à partir d'une police .Mais ensuite , il faut travailler la couleur de ce bitmap avec un logiciel de dessin ? dommage .
Enfin , de pouvoir créer la planche de caractères facilement ,c'est déjà pas si mal que ça

quand on voit les planches qu'il propose , il y a déjà de bons résultats .
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
non, on peut travailler la couleur avec ma lib effect par exemple.
tu dessines ton texte en blanc sur fond noir. ensuite tu peux appliquer un filte bleu pour avoir les carac en bleu (le noir va pas changer lui) par exemple.
enfin, on peut imager plein d'effet autre que les couleurs.
détectés les bords du carac et le mettre en rouge par exemple.
Une autre astuce, dessine tes caractères en très grand (environ 4 fois plus grand que la taille nécessaire)
tu appliques tes effets dessus cette image
puis tu redimensionnes la à la taille souhaitée
Tu auras un lissage de tes carac, ça peut être sympa
tu dessines ton texte en blanc sur fond noir. ensuite tu peux appliquer un filte bleu pour avoir les carac en bleu (le noir va pas changer lui) par exemple.
enfin, on peut imager plein d'effet autre que les couleurs.
détectés les bords du carac et le mettre en rouge par exemple.
Une autre astuce, dessine tes caractères en très grand (environ 4 fois plus grand que la taille nécessaire)
tu appliques tes effets dessus cette image
puis tu redimensionnes la à la taille souhaitée
Tu auras un lissage de tes carac, ça peut être sympa

Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
est ce qu'on pourrait pas appliquer une texture (un bitmap quelconque) à une police sur ton principe ?
. on detecte les bordures
. on créé un masque
. on dessine une texture dans la zone masquée
. on reduit par 4 pour lisser
. et voilà
je dis ca mais je sais meme pas comment resoudre la premiere etape ( detection des bordures )
en reflechissant un peu je me dis que je ferais comme çà, dis moi si je me trompe :
. on choisit une couleur de fond ( noir rgb(0,0,0) par ex. )
. on balaye l'image pixel apres pixel ( de w en h ) avec Point(x,y)
. si le point est de couleur differente que la couleur de fond alors ce point appartient au masque
. et apres...
. on detecte les bordures
. on créé un masque
. on dessine une texture dans la zone masquée
. on reduit par 4 pour lisser
. et voilà
je dis ca mais je sais meme pas comment resoudre la premiere etape ( detection des bordures )

en reflechissant un peu je me dis que je ferais comme çà, dis moi si je me trompe :
. on choisit une couleur de fond ( noir rgb(0,0,0) par ex. )
. on balaye l'image pixel apres pixel ( de w en h ) avec Point(x,y)
. si le point est de couleur differente que la couleur de fond alors ce point appartient au masque
. et apres...
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
texte en blanc
fond en noir
pour appliquer une texture, c'est très simple :
On dessine la texture sur une image ayant la même taille que les caracs
on regarde chaque pixel de l'image des carac, et si la couleur est blanche, on remplace par la pixel équivalent de la texture.
Pour les bordures, c'est également simple :
Pour une bordure à l'extérieur de la police
Pour chaque pixel de l'image, si il est noir
on regarde les pixel au nord, sud est ouest
si l'un d'entre eux est blanc, on est sur la bordure extérieur d'un carac
Pour épaissir le trait de bordure, il suffit de regarder plus loin autour du point noir
attention, pour travailler propement, il faut regarder si on peut trouver un point blanc à coté du point noir appartenant à un cercle de rayon X, X étant l'épaisseur de la bordure
pour une bordure à l'intérieur de la police, c'est l'inverse, on regarde si le point est blanc et si oui, on regarde les pixel au nord, sud est ouest
si l'un d'entre eux est noir, on est sur la bordure intérieur d'un carac
voilà
fond en noir
pour appliquer une texture, c'est très simple :
On dessine la texture sur une image ayant la même taille que les caracs
on regarde chaque pixel de l'image des carac, et si la couleur est blanche, on remplace par la pixel équivalent de la texture.
Pour les bordures, c'est également simple :
Pour une bordure à l'extérieur de la police
Pour chaque pixel de l'image, si il est noir
on regarde les pixel au nord, sud est ouest
si l'un d'entre eux est blanc, on est sur la bordure extérieur d'un carac
Pour épaissir le trait de bordure, il suffit de regarder plus loin autour du point noir
attention, pour travailler propement, il faut regarder si on peut trouver un point blanc à coté du point noir appartenant à un cercle de rayon X, X étant l'épaisseur de la bordure
pour une bordure à l'intérieur de la police, c'est l'inverse, on regarde si le point est blanc et si oui, on regarde les pixel au nord, sud est ouest
si l'un d'entre eux est noir, on est sur la bordure intérieur d'un carac
voilà

Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
un exemple de texte avec bordure
Il faut ma lib Effect mise à jour, il y avait un bug dedans 
Code : Tout sélectionner
; Auteur : Le Soldat Inconnu
; Version de PB : 3.9
;
; Explication du programme :
Structure TextTableInfo
Width.l
Height.l
ImageID.l
EndStructure
Procedure.l TextTable(Table.l, Police.s, Taille.l, Style.l)
Protected Image.l, Font.l, FontID.l, Txt.s, Couleur.l , n, i, ii, Win, Progress, Text
Win = OpenWindow(#PB_Any, 0, 0, 200, 35, #PB_Window_ScreenCentered | #PB_Window_SystemMenu, Police + " (" + Str(Taille) + ")")
If Win
If CreateGadgetList(WindowID())
Text = TextGadget(#PB_Any, 0, 0, 200, 15, "")
Progress = ProgressBarGadget(#PB_Any, 0, 15, 200, 20, 0, 255 - 32)
#TextTableZoom = 6
#Bordure = 1
; On charge la police
Font = LoadFont(#PB_Any, Police, Taille * #TextTableZoom, Style)
FontID = FontID()
For n = 32 To 255
Txt = Chr(n)
SetGadgetText(Text, Txt)
SetGadgetState(Progress, n - 32)
UpdateWindow_(WindowID())
While WindowEvent()
Wend
; on calcul la taille du caractère
Image.l = CreateImage(#PB_Any, 10, 10)
hdc = StartDrawing(ImageOutput())
DrawingFont(FontID())
GetTextExtentPoint32_(hdc, @Txt, 1, Size.SIZE)
StopDrawing()
FreeImage(Image)
; on ajoute une bordure
Size\cx + #Bordure * #TextTableZoom * 2
Size\cy + #Bordure * #TextTableZoom * 2
; on dessine le caractère
Image.l = CreateImage(#PB_Any, Size\cx, Size\cy)
StartDrawing(ImageOutput())
DrawingFont(FontID)
DrawingMode(1)
FrontColor($FF, $FF, $FF)
Locate(#Bordure * #TextTableZoom, #Bordure * #TextTableZoom)
DrawText(Txt)
StopDrawing()
; On récupère l'image sous forme de tableau pour travailler plus vite
Dim TableTemp.l(Size\cx - 1, Size\cy - 1)
GetImageBits(UseImage(Image), @TableTemp())
; On pixellise la police pour travailler facilement dessus
For i = 0 To Size\cx - 1
For ii = 0 To Size\cy - 1
Couleur = TableTemp(i, ii)
If Couleur > 0 And Couleur < $FFFFFF
If Couleur > 127
TableTemp(i, ii) = $FFFFFF
Else
TableTemp(i, ii) = 0
EndIf
EndIf
Next
Next
; On dessine la bordure externe
For i = 0 To Size\cx - 1
For ii = 0 To Size\cy - 1
If TableTemp(i, ii) = 0
For j = -#Bordure * #TextTableZoom To #Bordure * #TextTableZoom
For jj = -#Bordure * #TextTableZoom To #Bordure * #TextTableZoom
If i + j >= 0 And i + j <= Size\cx - 1 And ii + jj >= 0 And ii + jj <= Size\cy - 1
If TableTemp(i + j, ii + jj) = $FFFFFF
Longueur = j * j + jj * jj
If Longueur <= #Bordure * #Bordure * #TextTableZoom * #TextTableZoom
TableTemp(i, ii) = $FF
Break 2
EndIf
EndIf
EndIf
Next
Next
EndIf
Next
Next
SetImageBits(UseImage(Image), @TableTemp())
Size\cx / #TextTableZoom
Size\cy / #TextTableZoom
ResizeImage(Image, Size\cx, Size\cy, #PB_Image_Smooth)
PokeL(Table + SizeOf(TextTableInfo) * n, Size\cx)
PokeL(Table + SizeOf(TextTableInfo) * n + 4, Size\cy)
PokeL(Table + SizeOf(TextTableInfo) * n + 8, Image)
Next
CloseFont(Font)
Dim TableTemp(0, 0)
EndIf
CloseWindow(Win)
EndIf
EndProcedure
Procedure DrawTextTable(Table.l, x.l, y.l, Txt.s)
Protected n.l, nn.l, Pos.l, Image.l, cx.l
Pos = 0
For n = 1 To Len(Txt)
nn = Asc(Mid(Txt, n, 1))
Image = PeekL(Table + SizeOf(TextTableInfo) * nn + 8)
cx = PeekL(Table + SizeOf(TextTableInfo) * nn)
DrawImage(UseImage(Image), x + Pos, y)
Pos + cx
Next
EndProcedure
; On crée la police sous forme de BMP
Dim Text.TextTableInfo(255)
TextTable(@Text(), "tahoma", 16, #PB_Font_HighQuality)
; On dessine la police sur une image
CreateImage(0, 300, 200)
StartDrawing(ImageOutput())
DrawTextTable(@Text(), 0, 0, "Bonjour les zamis !")
DrawTextTable(@Text(), 0, Text(100)\Height, "Comment ça va bien ?")
DrawTextTable(@Text(), 0, Text(100)\Height * 2, "0123456789")
StopDrawing()
; Text(100)\Height
; je prends un carac au pif et je la hauteur (tous les carac ont la même hauteur)
; Création de la fenêtre principale
UseImage(0)
OpenWindow(0, 0, 0, ImageWidth(), ImageHeight(), #PB_Window_SystemMenu | #PB_Window_ScreenCentered, "TextTable")
CreateGadgetList(WindowID())
ImageGadget(0, 0, 0, 0, 0, UseImage(0))
Repeat
Event = WaitWindowEvent()
Until Event = #PB_EventCloseWindow
End

Je ne suis pas à moitié Polonais mais ma moitié est polonaise ... Vous avez suivi ?
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
[Intel quad core Q9400 2.66mhz, ATI 4870, 4Go Ram, XP (x86) / 7 (x64)]
-
- Messages : 4312
- Inscription : mer. 28/janv./2004 20:58
- Localisation : Clermont ferrand OU Olsztyn
- Contact :
Merci LSI , j'y jetterai un oeil . Un bon exemple à mettre sur 2Dev 
Sinon en modifiant le source, j'ai pu obtenir la création d'une planche avec des caractères en couleur. Iil faudrait compléter le code pour gérer différents effets , comme celui proposé par LSI , et en ajouter d'autres.
Je mets ça dans ma liste "des trucs à faire éventuellement un jour de pluie" .

Sinon en modifiant le source, j'ai pu obtenir la création d'une planche avec des caractères en couleur. Iil faudrait compléter le code pour gérer différents effets , comme celui proposé par LSI , et en ajouter d'autres.
Je mets ça dans ma liste "des trucs à faire éventuellement un jour de pluie" .