Créer une pseudo police (Rien a voir avec la gendarmerie)

Sujets variés concernant le développement en PureBasic
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

@DOBRO
Merci beaucoup de tout ces liens.
Je vais étudier ça.
Bonne journée
donc ton post precedent pourrait tenir en 2 ou 3 lignes
Bosse le sujet Kwai...bosse le sujet
Je t'ai reconnu CHRIS enleve ton costume de RV, je t'ai reconnu :o
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

@CASE
si il faut la saisir au clavier c'est pas gagné si les symboles ne correspondent pas au touches :p
sinon tu peux peut etre essayer un truc de ce genre
http://fr.wikipedia.org/wiki/Code_QR
Excuse moi j'avais zappé ton génial lien :D

Voila c'est dans la direction de ce que je veux faire.
Quand je vous dit que c'est les asiatiques les meilleurs.

Merci, je vais regardé ça aussi
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Bon, pour résumer ton projet, mon cher KCC (excellente cette série, tu savais que c'était Bruce Lee qui devait faire le rôle?), c'est encoder une phrase grâce à ta police, l'envoyer telle quelle par email à un correspondant qui aura la même police et qui pourra donc la décoder.

Petit exemple pour ceux qui n'ont rien compris à ton charabia (comme je les comprends!) :
Imaginons que dans le caractère "a" soit dessiné "quel", dans le "b" "beau", dans le "c" "temps", dans le "d" "aujourd'hui", il suffirait d'envoyer abcd pour vouloir dire "quel beau temps aujourd'hui". Enfantin. Magnifique. Surtout qu'en unicode on peut avoir 65536 caractères différents, il y a largement de quoi faire un paquet de mots.

Bon, je vais te dire, cette méthode de cryptographie existe depuis belle lurette, et c'est aussi une des meilleures :) : on utilise un code connu simplement de soi-même et du correspondant, clé symétrique.
Le principal problème est que certains mots reviennent souvent. Du coup on finit toujours par casser ce cryptage... :(

Sinon, ton idée d'utiliser une police est excellente, et très facile à mettre en oeuvre. Si les mots sont assez long, il sera difficile de déchiffrer le message. En tous cas, bon courage pour la suite :)

PS: tu vois que tu n'es pas nul, tu inventes des choses qui marchent! Au fond de toi tu le sais, et tu n'as pas besoin de te dévaluer comme ça. Ici on est tous là pour apprendre, à soumettre nos idées et nos programmes.

PS2: par contre si tu pouvais raccourcir tes messages, on gagnerait du temps! j'ai pas que ça à faire!!!

PS3: ton histoire de base c'est n'importe quoi. Tout simplement parce qu'il te faudrait autant de caractères qu'il y a de possibilités. Réfléchis, banane! :lol:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

par contre si tu pouvais raccourcir tes messages, on gagnerait du temps! j'ai pas que ça à faire!!!
En plus d'etre ronchon 2, t'es un comique toi :lol:

Quand je fais court, on me pose noir de questions et comme je n'arrive pas à me faire comprendre, je détaille.

Et quand j'ai détaillé, on me dit t'aurais du faire plus court :?
ton histoire de base c'est n'importe quoi. Tout simplement parce qu'il te faudrait autant de caractères qu'il y a de possibilités. Réfléchis, banane!
Bon sang t'a rien écouté a ce qu'il a dit le monsieur.
Ce n'est pas une coordonnance entre deux tableau chacun d'un coté que j'aurais aimé faire, c'est vrai que c'est bien, mais bien passer une phrase en ASCII et apres travailler avec des opérations mathématiques qui permettent de réduire un chiffre, y'a pas de mot codé dans un caractere, y'a une phrase de 100 caracteres qui deviens un phrase de 10 caractere tout dépend de la BASE
Bon sang de bonsoir, t'écoute rien gourgandine :D

Alors je répete pour le petit DJES qui dormait pres du radiateur :?

Ma clef est :

Code : Tout sélectionner

Ra55

Je la convertie en ASCII pour qu'il n'y ai plus de lettre :

Code : Tout sélectionner

82975353
Si je converti ce nombre en base2 j'ai 27 caracteres:

Code : Tout sélectionner

100111100100001101001111001
En base 8 = 9 caracteres :

Code : Tout sélectionner

474415171
En base 10 = 8 caracteres (La base de départ)

Code : Tout sélectionner

82975353
In base 16 = 7 caracteres :

Code : Tout sélectionner

4F21A79
In base 62 = 5 caracteres :

Code : Tout sélectionner

5c9g9
Donc on peux résonablement penser que si je faisais une base 2^64, mon chiffre de départ ferait peut etre 1 ou 2 caracteres.
J'suis une moule en math, mais ça me parait logique :?

Moi la soulution que je cherche, c'est comment ecrire un caractere pixel par pixel dans un notepad, et puis apres comment le lire :roll:
Parce que la police du note-pad elle est aussi vectorielle ????

Si tu me trouve un code qui dessine les bananes dans un note pad......j'suis preneur ça devrait me faire avancer :lol:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bon j'ai trouvé un editeur de police bitmap.
Apparement la matrice est de 24 x 13.

Pour ceux qui n'etaient pas pres du radiateur à l'ecole en math.
Serait-ce raisonable de dire que j'ai :

24 x 13 = 312 cases

Donc 2^312 possibilités différentes :roll:
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Message par Backup »

Kwai chang caine a écrit :Bon j'ai trouvé un editeur de police bitmap.
Apparement la matrice est de 24 x 13.

Pour ceux qui n'etaient pas pres du radiateur à l'ecole en math.
Serait-ce raisonable de dire que j'ai :

24 x 13 = 312 cases

Donc 2^312 possibilités différentes :roll:
si tu veux,
tu peux utiliser 2 octets&255 !! et tu as 65535 possibilités binaires !
t'es meme pas obligé de passer par un caractere !!

ce que je ne comprends pas dans ton cas c'est pourquoi passer par une petite matrice Graphique qu'est un caractere ?? 8O
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

ce que je ne comprends pas dans ton cas c'est pourquoi passer par une petite matrice Graphique qu'est un caractere ??
Bah, "j'avais un reve" ah non ça quelqu'un l'a déjà dit avant moi :D

En fait, je voulais profiter de la matrice graphique d'un caractere pour pouvoir en tapant un seul caractere, avec l'histoire des bases que j'ai raconté au dessus, dire par exemple au hasard "Coucou il fait beau et je suis content de programmer".
Comme je l'ai expliqué plus haut, le fait de passer en ascii et de convertir le chiffre ASCII en une base monstrueuse, reduirait ce grand chiffre a néant. Et comme dans un caractere y'a 24 pixel par 13 eh ben ça me fait comme si j'avais un nombre de 24 x 13 bits qui peuvent etre chacune à 1 ou 0.
Donc 312 bits ce qui donne 2^312 = 8,34369935906606E+93 possibilités differentes donc une base8,34369935906606E+93.
Meme si j'utilise pas toutes les possiblitées converti en cette base mon grand chiffre ASCII

Code : Tout sélectionner

67111117991111173210510832102971051163298101971173210111632106101321151171051153299111110116101110116321001013211211411110311497109109101114
venant de cette phrase "Coucou il fait beau et je suis content de programmer" devrait etre ecrit en quelques caracteres.

Bon apparemment comme c'est la galere le TTF, j'ai donc eu l'idée de créer mon propre editeur.
Quels sont les gadgets ou l'on peux ecrire un pixel et surtout lire si ce pixel est allumé ?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Kwai chang caine a écrit : Ma clef est :

Code : Tout sélectionner

Ra55

Je la convertie en ASCII pour qu'il n'y ai plus de lettre :

Code : Tout sélectionner

82975353
Si je converti ce nombre en base2 j'ai 27 caracteres:

Code : Tout sélectionner

100111100100001101001111001
En base 8 = 9 caracteres :

Code : Tout sélectionner

474415171
En base 10 = 8 caracteres (La base de départ)

Code : Tout sélectionner

82975353
In base 16 = 7 caracteres :

Code : Tout sélectionner

4F21A79
In base 62 = 5 caracteres :

Code : Tout sélectionner

5c9g9
Donc on peux résonablement penser que si je faisais une base 2^64, mon chiffre de départ ferait peut etre 1 ou 2 caracteres.
J'suis une moule en math, mais ça me parait logique :?
Du grand n'importe quoi!

Si ta clef est Ra55, en ASCII c'est Ra55, point barre!

Tu la convertis en *décimal* en te basant sur les codes ASCII 8 bits, tu as bien 82975353. Mais ceci n'est pas un nombre, c'est une *série* de 8 nombres!

Donc, si tu dois convertir en binaire, tu dois convertir 5 nombres * 8 bits = 40 bits (je rappelle qu'un bit vaut 0 ou 1, ce n'est pas le CARACTERE 0 ou 1, OK????). Si on compte en caractères on a 40 caractères.

De même, en base 16, tu dois avoir 5 nombres * 2 quartets, chacun représentable pr convention par un caractère allant de 0 à 9 puis de A à F pour représenter 16 possibilités. Ce qui ferait en caractères si on part d'un octet 5*2=10 caractères.

Après tu délires encore plus grave, base 62 = 5 caractères!!! What's the fuck?! D'où sors-tu 5c9g9???? Tu devrais avoir chaque fois un caractère unique représentant 62 (?) possibilités!

Pfff, comment je perds mon temps là... :(
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Alors la je sentirais une pointe d'agréssivité, que ça m'étonnerait pas :?

Bon puisque tu joue sur les mots, moi j'en sais rien que c'est pas ASCII que ça s'appelle.
Tout ce que je sais c'est que le nombre de caractere descend plus la base est grande, na !

Le probleme c'est que j'ai pas assez de caracteres pour avoir une grande base, je suis arrivé à 115 avec peine pour ne pas utiliser des caracteres trop speciaux.

Bon puisque tu perd ton temps, je vais t'en faire gagner, voila avec quel code je converti, c'est un code originaire de AlGonzales que j'ai modifié en base62, et qui avait été corrigé par LNA

Code : Tout sélectionner

; http://www.purebasic.fr/english/viewtopic.php?t=9617&highlight=convert+base
; Code de AlGonzales modifié en base 62 par KCC

#BASEMIN =  2 
#BINBASE =  2 
#OCTBASE =  8 
#HEXBASE = 16 
#TRENTESIXBASE = 36 
#SOIXANTEDEUXBASE = 62

Procedure.s Int2Base(Value.l, Base.l) 

 Protected Result.s 

 If (Base >= #BASEMIN) And (Base <= #SOIXANTEDEUXBASE)
 
  Protected  i.l 

  Repeat 
   i = (Value % Base) + 1 
   Value = (Value / Base) 
   Result = Mid("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", i, 1) + Result 
  Until Value = 0 

 EndIf 

 ProcedureReturn Result 

EndProcedure 

Procedure.l Base2Int(Value.s, Base.l) 
 
 Protected Result.l 
 Result = 0 

 If (Base >= #BASEMIN) And (Base <= #SOIXANTEDEUXBASE) 

  Protected i.l, c.l 

  For i = 1 To Len(Value) 

   c = FindString("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", Mid(Value, i, 1), 1) 
   ; Return -1 If character is not supported by base 

   If c > Base 
    Result -1 
    Break 
   EndIf 

   Result = (Result * Base) + (c - 1) 

  Next i 

 EndIf 

 ProcedureReturn Result 

EndProcedure
    
Procedure.s ConvertEnASCII(PhraseACoder.s)

 PhraseASCII.s
  
 For i = 1 To Len(PhraseACoder)
  
  NombreASCII.l = Asc(Mid(PhraseACoder, i, 1))
  PhraseASCII + Str(NombreASCII)
  
 Next

 ProcedureReturn PhraseASCII

EndProcedure


i = Val(ConvertEnASCII("Ra55"))
 
Bin.s = Int2Base(i, #BINBASE)
Oct.s = Int2Base(i, #OCTBASE)
Dec.s = Str(i)
Hex.s = Int2Base(i, #HEXBASE)
B62.s = Int2Base(i, #SOIXANTEDEUXBASE)

Debug "Ascii = " + Str(i)
Debug "Bin or Base  2 = " + Bin 
Debug "Oct or Base  8 = " + Oct
Debug "Dec or Base 10 = " + Dec
Debug "Hex or Base 16 = " + Hex
Debug "Base 62 = " + B62
Debug ""
Debug ""
Debug "Bin or Base  2 = " + Str(Base2Int(Bin, #BINBASE))
Debug "Oct or Base  8 = " + Str(Base2Int(Oct, #OCTBASE))
Debug "Dec or Base 10 = " + Dec
Debug "Hex or Base 16 = " + Str(Base2Int(Hex, #HEXBASE))
Debug "Base 62 = " + Str(Base2Int(B62, #SOIXANTEDEUXBASE))
Bon alors tu appelle ça des bits, de l'ascii, des octets, du justin bridou enfin ce que tu veux, mais tu ne peux pas dire que les caracteres ne réduisent pas :?

Je vais t'en donner une encore plus drole, en base 115, ça donne "6Vy" donc 3 caracteres, et la on est à moins de caracteres que la phrase du debut.
Et j'ai remarqué que quand on montait d'une base avec un chiffre de plus, on reduisait le chiffre "basé" d'un chiffre aussi".
C'est à dire que si j'arrivais a faire une base 100000, peut etre que j'aurais qu'un caractere :roll:
Ce doit etre logique pour vous les matheux :D

Bon alors, peut etre que j'ai pas utilisé les bons mots, mais le code ci dessus, y code et réduis le nombre de caracteres et apres il rammene tout comme c'etait, donc il ne perd rien en route non ????
Bon alors qui c'est qui dit des conneries :?
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Je ne suis pas aggressif, juré!

Mais ton interprétation est archi-fausse... Mon erreur est de vouloir te le prouver, alors que tu le comprendras bien mieux par toi-même quand, en essayant d'utiliser ton truc, tu découvriras que ça ne marche pas : pour réduire une suite d'octets (base 256 si tu veux lol), il ne suffit pas de changer de base! Ce serait un peu trop facile :)

Mais si tu y arrives, je suis prêt à t'envoyer une banane avec mon autographe. :lol:
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Je les aime pas trop mure :lol:

Mais sans parler des interpretations, tu ne peux quand meme pas dire que jusque la, ça marche pas???
Ou alors, c'est toi qui a inventé la mauvaise foi :lol:
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Message par djes »

Essaye donc d'encoder une phrase avec n'importe quel caractère.
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Je vais essayer parce que je t'aime bien :D
Et parce que je suis pas une tete de lard, moi :lol:

Mais je ne vois pas ou va etre le bleme, puisque la premiere chose que je fais c'est la transformer en chiffre.
Peut etre que tu va me dire que certain symbols dépassent les 2 chiffres en conversion "ASCII" et donc ça va agrandir mon chiffre d'origine.

Certe, mais :
1/ En principe, je ne devrait utiliser que principalement les lettres et chiffres de l'alphabet, donc je reste dans la conversion à 2 chiffres.
2/ En plus, rare seront ceux, qui ne convertiraient que des hieroglyphes de 3 chiffres.
3/ On ne peux dépasser les 3 chiffres, puisque la table ASCII - ANSI ne dépasse pas 255
4/ En plus, avec ma méga BASE de la mort qui tue sa race, elle va te l'avaler ce grand nombre, meme si il y a quelques caracteres de plus.

Je vais te la doper, tu va voir, ça :D

Bon, celui qui a perdu, offre une banane à l'autre avec écrit dessus : "je m'excuse et je suis bete à manger des bananes", et bien sur dédicacée :D
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Message par Kwai chang caine »

Bon apres une bonne journée de travail, ouai je sais j'suis pas productif.
J'ai créé ça :D
Image

Il me reste à créé un générateur de caractere spéciaux, car je compte pas me palucher le million de caracteres :?

Par contre j'ai une question qui va vous faire rire.
Sisi elle devrait vous faire rire.
J'en suis quasi sur.
Allez tanpis, j'me lance, le ridicule ne tue pas autrement, j'mourrais toutes les 10 secondes.

On peux pas lire dans ce genre de fenetre graphique :D
Personne n'a eu la géniale idée de créer un code qui selon les pixels analyserais la lettre, un genre d' OCR quoi....

La meilleure méthode c'est je pense de créer une "fenetre" de lecture de la taille de la matrice des caracteres de la promener et quand on a les memes octets que dans le caractere du fichier ça dit bingo.

Ou alors peut etre de "numériser" à son tour cette image et de rechercher entre son fichier de pixel et chaque fichier de pixel la meme suite de coordonnée x,y et couleur du pixel.

Bah dis donc si c'est ça va falloir un P12

Si vous connaissez mieux ....
Merci d'avance
Dernière modification par Kwai chang caine le dim. 10/févr./2008 16:28, modifié 1 fois.
Avatar de l’utilisateur
case
Messages : 1545
Inscription : lun. 10/sept./2007 11:13

Message par case »

bon je ne sais pas pourquois tu persiste dans cette oh combien casse-gueule direction , pleine de plaques d'huiles et d'embuches.

mais puisque ton but est de reduire une phrase super-longue a peu de chose

voici une idée a toi d'en decouvrir le sens caché en executant ce etit bout de code.

image ayant servi de base
http://zorgrage.dyndns.org/pure/images/kcc/base.bmp

image a decoder
http://zorgrage.dyndns.org/pure/images/kcc/kcc.bmp

Code : Tout sélectionner

Declare getmem(ID)
Declare putmem(id,mem)
Declare encode(txt$,id)
Declare.s decode(id)
;       bitmap=LoadImage(#PB_Any,"base.bmp") ; charge une image
;	encode("",bitmap)				; encode un texte dans l'image
;   SaveImage(bitmap,"kcc.bmp")	; sauve l'image avec le texte encodé
;   FreeImage(bitmap)				; libere la memoire
   bitmap=LoadImage(#PB_Any,"kcc.bmp") ;charge une image
Debug decode(bitmap)				; decode le texte contenu dans l'image
FreeImage(bitmap)
;
;
;
;   le signe     ; /!\
;						
;   indique que cette partie du code n'est utile que si l'on desire garder les delimitations de l'exemple
;   a savoir un pixel en bas et un pixel de chaque cote pour conserver la bordure
;
;
Procedure encode(txt$,id)
	*buffer=getmem(id)
	pos=33*4						; /!\
	x=1								; /!\
	For a=1 To Len(txt$)+1
		If a<=Len(txt$)
			PokeB(*buffer+pos,Asc(Mid(txt$,a,1)))
		Else
			PokeB(*buffer+pos,Asc(Mid(txt$,a,0)))
		EndIf
		z=z+1
		If z<3
			pos=pos+1
		Else 
			pos=pos+2
			x=x+1					; /!\
			If x=31					; /!\
				x=1					; /!\
				pos=pos+8			; /!\
			EndIf					; /!\
			z=0
		EndIf
	Next
	putmem(id,*buffer)
	FreeMemory(*buffer)
EndProcedure
Procedure.s decode(id)
	*buffer=getmem(id)
	pos=33*4						; /!\
	x=1								; /!\
	Repeat
		v=PeekB(*buffer+pos)
		Debug v
		z=z+1
		If z<3
			pos=pos+1
		Else 
			pos=pos+2
			x=x+1					; /!\
			If x=31					; /!\
				x=1					; /!\
				pos=pos+8			; /!\
			EndIf					; /!\
			z=0
		EndIf	
		If v<>0
			st$=st$+Chr(v)
		EndIf
	Until v=0
	FreeMemory(*buffer)
	ProcedureReturn(st$)
EndProcedure
Procedure getmem(ID) ; copie une image dans la memoire pour y effectuer des operations avec peek et poke :) 
	ImageID=  ImageID(id)
	Hdc = CreateCompatibleDC_ ( GetDC_ ( ImageID ))
	If HDC
		bmi.BITMAPINFO
		bm.BITMAP
		GetObject_ ( ImageID , SizeOf(BITMAP), @bm.BITMAP)
		bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
		bmi\bmiheader\biWidth = bm\bmWidth
		bmi\bmiheader\biHeight = bm\bmHeight
		bmi\bmiheader\biPlanes = 1
		bmi\bmiheader\biBitCount = 32
		bmi\bmiheader\biCompression = #BI_RGB
		HList = AllocateMemory (bm\bmWidth*bm\bmHeight*4)
		GetDIBits_ (hDC, ImageID ,0,bm\bmHeight,HList,bmi, #DIB_RGB_COLORS ) 	
		ProcedureReturn HList
	EndIf	
EndProcedure
Procedure putmem(id,mem) ;copie une zone memoire dans une image existante
	ImageID=  ImageID(id)
	Hdc = CreateCompatibleDC_ ( GetDC_ ( ImageID ))
	If HDC
		bmi.BITMAPINFO
		bm.BITMAP
		GetObject_ ( ImageID , SizeOf(BITMAP), @bm.BITMAP)
		bmi\bmiHeader\biSize = SizeOf(BITMAPINFOHEADER)
		bmi\bmiheader\biWidth = bm\bmWidth
		bmi\bmiheader\biHeight = bm\bmHeight
		bmi\bmiheader\biPlanes = 1
		bmi\bmiheader\biBitCount = 32
		bmi\bmiheader\biCompression = #BI_RGB
		HList = AllocateMemory (bm\bmWidth*bm\bmHeight*4)
		SetDIBits_ (hDC, ImageID ,0,bm\bmHeight,mem,bmi, #DIB_RGB_COLORS ) 			
	EndIf
EndProcedure

Répondre