Centre de Formation Flash - Forums Adobe Flash: stocker une string de 0 et 1 en 'binaire' (sur 32bits) - Centre de Formation Flash - Forums Adobe Flash

Voir le contenu

Page 1 sur 1
  • Vous ne pouvez pas créer de sujet
  • Vous ne pouvez pas répondre au sujet

stocker une string de 0 et 1 en 'binaire' (sur 32bits) des grandes strings

#1 Utilisateur non-connecté   nicoptere

  • MovieSlip
  • Groupe : Modérateurs
  • Messages : 3789
  • Inscrit : 16-January 06
  • Gender:Male
  • Location:Paris
  • Version logiciel:CS 10.000
  • Compétences: Développeur Actionscript 3.

Posté 23 July 2008 - 11:22 PM

salut à tous,

je suis en train de me péter les quenottes sur un truc qui doit être simple, juste que j'ai pas le niveau en maths.

je suis en train de faire un traitement sur des images noir et blanc (une squeletisation si ça dit quelque chose à quelqu'un) j'ai donc des 0 et 1 entrée.
comme il y a une batterie de boucles conséquente, les temps d'éxécution ne me plaisait pas du tout avec des get/stePixels ( > 4000 ms pour un 100*100 pix ce qui est mal ).

pour gagner du temps et éviter de reparser l'original à chaque kernel, je stocke les 0 et les 1 dans une String trèèèès longue et je travaille dessus comme si c'était un array à 2 dimensions (cf. en bas).

j'aimerais bien réduire encore les temps d'appel sur cette chaîne et j'ai l'impression que d'aller taper directement dans les 0 et 1 d'un uint serait plus rapide et plus élégant que de faire des str.charAt() pourris. les strings c'est pas fait pour ça.

donc j'ai plein de questions:

est ce que ça vous parait malin? quelle autre méthode existe-t'il ?

sachant que le nombre maxi de 0 et 1 sera 8.294.400 ( 2880*2880 ) mais qu'une String aime pas trop aller au delà de 65533 caractères(256*256 pix, nul.), comment peut on faire le découpage ? des bouts de 256? 512? 4096? ( pourquoi? )

comment convertir les strings en nombres puis comment retrouver une valeur au niveau du bit? ( sans Array, sans byteArray, les ByteArray c'est nul)
comment stocker ces nombres ?

je me suis fait des petites méthodes sympathiques pour aller taper dans une string comme si c'était un tableau 2D:
celle là renvoie la valeur 0 ou 1 d'un point (x, y) du bitmapData d'origine:

Action Script

fromString( x:int, y:int ):int
{
var i:int = int( str.charAt( ( y * W ) + x % W ) );
return i;
}

où str est la suite de 0-1 et W la largeur de l'image d'origine.

et celle là dessine un point en X,Y à partir d'un index de la string:

Action Script

if( str.charAt( i ) == '1') bmpd.setPixel(  i % W, Math.floor( i / W ), col );

où str est la suite de 0-1 et W la largeur de l'image d'origine.

que donnerait l'équivalent de ça si on travaille sur des nombres ?

bon merci d'avoir lu jusqu'ici smile.gif
+
0

#2 Utilisateur non-connecté   la pieuvre

  • ...
  • Groupe : Habitués
  • Messages : 2903
  • Inscrit : 18-February 05
  • Gender:Male
  • Location:france(paris)
  • Interests:flash, sciences cognitives, IA, musique, moto, ciné,...
  • Version logiciel:cs4
  • Compétences: Développeur Actionscript 3.

Posté 24 July 2008 - 01:22 AM

salut, salut,

jai peur que ce ne soit pas possible, pour la simple et bonne raison que je ne croix pas que l'on puisse travailler sous flash avec du binaire (mais je peux me tromper) une raison à cela, c'est que pour le binaire on utilise de l'hexa... c'est plus cours smile.gif et en plus lorsque on stock un hexa on récupère un décimal donc on est mal barré pour travailler avec des binaires.

une technique consisterai convertir ton nombre décimal en binaire à chaque coup mais je ne suis pas sur du résultat question performance wink.gif... sinon j'ai pas d'autre idée smile.gif.

bonne soirée.
ni pour, ni contre... bien au contraire!!
0

#3 Utilisateur non-connecté   nicoptere

  • MovieSlip
  • Groupe : Modérateurs
  • Messages : 3789
  • Inscrit : 16-January 06
  • Gender:Male
  • Location:Paris
  • Version logiciel:CS 10.000
  • Compétences: Développeur Actionscript 3.

Posté 24 July 2008 - 08:03 AM

salut,
merci.

j'aurais aussi dû rajouter que je sais pas de quoi je cause en disant binaire... icon_redface.gif

stocker en hexa ça irait aussi, c'est la forme de chiffre qui m'intéresse.
en fait ce erait comme pour 'mapper' cette grande string, pour aller plus vite.

mettons ça :
Citation
0 = 00000000000000000000000000000000
21 = 00000000000000000000000000010101
1024 = 00000000000000000000010000000000
32767 = 00000000000000000111111111111111
32768 = 00000000000000001000000000000000
65536 = 00000000000000010000000000000000
16777216 = 00000001000000000000000000000000
999999999 = 00111011100110101100100111111111


je suis pas bon en ça, pour la conversion String nombre, j'ai trouvé

Action Script

parseInt( '00111011100110101100100111111111', 2 );
qui marche bien
mais ça oblige à découper des morceaux de 32 (non?)

mais j'ai vraiment du mal à savoir ce que me donnerait 32768 au 'caractère' 10 ; 0 ou 1?



0

#4 Utilisateur non-connecté   hubeert

  • Habitué
  • Groupe : Habitués
  • Messages : 790
  • Inscrit : 09-September 03
  • Location:chateauneuf du pape
  • Version logiciel:flash X (10)

Posté 24 July 2008 - 08:47 AM

coucou
il y a plein de possibilites pour bosser en binaire en flash.. d'ailleur meme si on le voit peu c'est a la fois tres elégant et aussi tres rapide..

par exemple
monNombre=15
trace(monNombre.toString(2))
donne 1111
et linverse bien sur parseInt(chiffre,base)
les outils pour bosser no rien avoir avec les outil string

ils sont le binaire le & binaire ,le ou |,le ou exclusif ^ ,le non binaire ~ le tilde; puis tous les operateur de decalage binaire a droite ou a gauche.. l'utilisation de math.pow.. en quoi est ce utile ca permet de stocker en un seul chiffre des tas d'indication.; par exemple mon tetris utilise a 90 % les technique binaire on ne peut pas aller au dela de 32 bit mais comme tu le suppose bien on peut decouper a linfini.. avec des methode plus ou moin lente pour retrouver ses petit.. bienvenu dans l monde du binaire icon_lol.gif icon_lol.gif icon_lol.gif
0

#5 Utilisateur non-connecté   hubeert

  • Habitué
  • Groupe : Habitués
  • Messages : 790
  • Inscrit : 09-September 03
  • Location:chateauneuf du pape
  • Version logiciel:flash X (10)

Posté 24 July 2008 - 09:14 AM

coucou
pour tester si un bit est sur 1 ou 0

Action Script

monNombre=32768;
for( var i=0;i<monNombre.toString(2).length;i++){
if( monNombre & Math.pow(2,i) )trace(i)}


il faut savoir que le nombre est lu par la fin ( c'est logique mais c'est deroutant)
donc le seul bit qui soit sur 1 dans 32768 (1000000000000000 en binaire) est le 15eme.
0

#6 Utilisateur non-connecté   tibibi

  • Ceinture d'Orion
  • Groupe : Modérateurs
  • Messages : 1694
  • Inscrit : 18-August 07
  • Gender:Male
  • Location:Aix-en-Provence
  • Interests:Le Surf,
    Le Jazz,
    La Guitar,
    La MS des Forex
  • Version logiciel:Flash CS4
  • Compétences: Non communiqué.

Posté 24 July 2008 - 09:23 AM

Salut,

Qu'elle algo utilises-tu pour ta squelettisation? J'avais tenté un truc avec celui de Hilditch mais le projet c'était arrêté icon_confused.gif

Donc ton projet m'intéresse icon_smile.gif

icon_wink.gif
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !"

Albert Einstein
0

#7 Utilisateur non-connecté   la pieuvre

  • ...
  • Groupe : Habitués
  • Messages : 2903
  • Inscrit : 18-February 05
  • Gender:Male
  • Location:france(paris)
  • Interests:flash, sciences cognitives, IA, musique, moto, ciné,...
  • Version logiciel:cs4
  • Compétences: Développeur Actionscript 3.

Posté 24 July 2008 - 09:51 AM

Citation (hubeert @ Jul 24 2008, 09:47 AM) Voir le message
coucou
il y a plein de possibilites pour bosser en binaire en flash.. d'ailleur meme si on le voit peu c'est a la fois tres elégant et aussi tres rapide..

par exemple
monNombre=15
trace(monNombre.toString(2))
donne 1111
et linverse bien sur parseInt(chiffre,base)
les outils pour bosser no rien avoir avec les outil string

ils sont le binaire le & binaire ,le ou |,le ou exclusif ^ ,le non binaire ~ le tilde; puis tous les operateur de decalage binaire a droite ou a gauche.. l'utilisation de math.pow.. en quoi est ce utile ca permet de stocker en un seul chiffre des tas d'indication.; par exemple mon tetris utilise a 90 % les technique binaire on ne peut pas aller au dela de 32 bit mais comme tu le suppose bien on peut decouper a linfini.. avec des methode plus ou moin lente pour retrouver ses petit.. bienvenu dans l monde du binaire icon_lol.gif icon_lol.gif icon_lol.gif


ha c'est cool ça !! smile.gif je ne m'était jamais vraiment penché sur le sujet mais mes rare recherche dans l'aide était infructueuse donc merci wink.gif
ni pour, ni contre... bien au contraire!!
0

#8 Utilisateur non-connecté   hubeert

  • Habitué
  • Groupe : Habitués
  • Messages : 790
  • Inscrit : 09-September 03
  • Location:chateauneuf du pape
  • Version logiciel:flash X (10)

Posté 24 July 2008 - 11:30 AM

coucou;
on peut stocker maxi 2147483648 soit "10000000000000000000000000000000" en binaire soit 32 info donc on va dire 32 pixel ou noir ou blanc.. sur 100 pixel il faut donc 4 variable pour couvrir le tout.; et multiplier par cent soit 400 variable pour avoir la tolalite de la photo en variable binaire.. ton probleme m'intersse mais jene sais pas ce que c'est que la squelettisation .. ?
0

#9 Utilisateur non-connecté   nicoptere

  • MovieSlip
  • Groupe : Modérateurs
  • Messages : 3789
  • Inscrit : 16-January 06
  • Gender:Male
  • Location:Paris
  • Version logiciel:CS 10.000
  • Compétences: Développeur Actionscript 3.

Posté 24 July 2008 - 11:54 AM

grand merci hubeert icon_biggrin.gif
je vais m'acheter un pot familial de dolipranes je crois icon_lol.gif

Citation (tibibi @ Jul 24 2008, 08:23 AM) Voir le message
Qu'elle algo utilises-tu pour ta squelettisation? J'avais tenté un truc avec celui de Hilditch mais le projet c'était arrêté icon_confused.gif

j'utilise un HitMiss avec 8 kernels(oui c'est relou) je ne connaissais pas hilditch ( donc merci ) en fait je le connaissais mais je l'avais jamais vu discrétisé smile.gif
tu trouveras un portage java ici : http://www.mpi-inf.m...ImgMethods.java (fait partie d'un package je crois)

edit : hubeert une squelettisation ( + cheap gradient morphologique wink.gif ) > http://www.nicoptere...a/skeletize.swf
(ça va tuer ton ordinateur, à ouvrir à part icon_biggrin.gif )

des explications théoriques ici : http://homepages.inf.../skeleton.htm#1
et ici (du coup):
http://cgm.cs.mcgill...ton.html#define

pour les explications :

et un exemple de string retournée:

00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000101100000000000000
00000000000000000000000000000000000001111100000000000000
00000000000000000000000000000000001111111100000000000000
00000000000000000000000000000000000111111000000000000000
00000000000000000000000000000000000011111000000000000000
00000000000000000000000000000000000010001000000000000000
00000000000000000000000000000000000010001000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000010000000000000000
00000000000000000000000000000000000000010000000000000000
00000000000000000000000000001111100000010000000000000000
00000000000000000000000000111111110000000000000000000000
00000000000000000000000001111111111000000000000000000000
00000000000000000000000001111111111100100000000000000000
00000000000000000000000011111111111100100000000000000000
00000000000000000000000111111111111110100000000000000000
00000000000000000000001111111111111111100000000000000000
00000000000000000000001111111111111111100000000000000000
00000000000001110000001111111111111111000000000000000000
00000000000111111111111111111111111111100000000000000000
00000000001111111111111111111111111111100000000000000000
00000000001111111111111111111111111111110000000000000000
00000000001111111111111111111111111111111100000000000000
00000000001111111111111111111111111111111100000000000000
00000000011111111111111111111111111111111100000000000000
00000000011111111111111111111111111111111100000000000000
00000000011111111111111111111111111111111100000000000000
00000000001111111111111111111111111111111000000000000000
00000000011111111111111111111111111111111100000000000000
00000000111111111111111111111111111111111100000000000000
00000001111111111111111111111111111111111110000000000000
00000001111111111111111111111111111111111111100000000000
00000111111111111111111111111111111111111111110000000000
00001111111111110111111111111111111100111111111000000000
00011111111110000011111111111111111100011111111100000000
00111111111100000011111111111111111100001111111100000000
00111111111000000001111111111111111100001111111000000000
00111111111000000001111111111111111100001111111100000000
00011111111000000000111111111111111100000111111110000000
00011111111000000000011111111111111100000011111111000000
00011111111000000000000111111111111000000001111111100000
00111111111000000000000001111111100000000001111111110000
00111111111000000000001111111111110000000001111111110000
00111111111000000000000111111111110000000001111111110000
00111111111110000000011111111111110000000000111111100000
01111111111111000001111111111111111000000000111111110000
00111111111111001101111111111111110000000000111111111000
00011111101110011111111111111111110000000000000111111100
00001111100000011111111111111111110000000000001111111100
00011111100000000111111111111111110000000000001111111100
00011111110000000111111111111111111000000000011110011110
00011111111000001111111111111111111100000000011110011110
00001111111000001111111111111111111100000000001100011110
00001111111000000111111111111111111100000000000000111110
00000001000000000111111111111111111100000000000000110110
00000000000000000001111111111111111100000000000000000000
00000000000000000000000111111111111000000000000000000000
00000000000000000000000111111111111000000000000000000000
00000000000000000000000111111111111000000000000000000000
00000000000000000000000111111111111000000000000000000000
00000000000000000000000111111111111000000000000000000000
00000000000000000000000111111111111000000000000000000000
00000000000000000000000011111111111000000000000000000000
00000000000000000000000011111111110000000000000000000000
00000000000000000000000011111111110000000000000000000000
00000000000000000000000001111111100000000000000000000000
00000000000000000000000000111110000000000000000000000000
00000000000000000000000000000000000000000000000000000000
0

#10 Utilisateur non-connecté   hubeert

  • Habitué
  • Groupe : Habitués
  • Messages : 790
  • Inscrit : 09-September 03
  • Location:chateauneuf du pape
  • Version logiciel:flash X (10)

Posté 24 July 2008 - 12:18 PM

coucou;
jenai pas compris comment tu recupere les valeur 0 et 1 du bitmap d'origine. ceci dit en binaire ca ne pose aucun probleme.. sur ton exemple il y a 64 pixel soit 2 variable par ligne et 70 ligne environ soit 140 variable a exploiter soit 140*32 boucle a faire.; jene sais pas si cest rentable mais faut teste.. ca iras sans doute plus vite que sur une string cest sur..par quelqusue astuce on doit pouvoir reduire le nombre de boucle.. par exemple toutes les valeur representant un valeur entiere exemple 10000 (16) on sait que tous les bit sont noir on saute la boucle.. pareil pour 16 -1 = 1111 en binaire on sait que tout est noir de cetttee facon on doit pouvroi aller assez vite.. mais ce n'est pour l'instant qu'une hypothese icon_smile.gif
0

#11 Utilisateur non-connecté   dav

  • Mediaboxers
  • Groupe : Habitués
  • Messages : 711
  • Inscrit : 20-September 02
  • Location:Chalon sur Saone
  • Version logiciel:Flash CS3
  • Compétences: Développeur Actionscript 3.

Posté 24 July 2008 - 01:16 PM

Si cela peux t'aider Nicopter, je t'invite à ne pas utiliser le uint qui est extrêmement lent, cela peux te permettre de gagner en perf. Préfères int ou Number. smile.gif
" Quand un homme a prouvé qu'il a du talent,
il lui reste à prouver qu'il sait s'en servir " (Jules Renard)

http://www.thelostvo.net
0

#12 Utilisateur non-connecté   tibibi

  • Ceinture d'Orion
  • Groupe : Modérateurs
  • Messages : 1694
  • Inscrit : 18-August 07
  • Gender:Male
  • Location:Aix-en-Provence
  • Interests:Le Surf,
    Le Jazz,
    La Guitar,
    La MS des Forex
  • Version logiciel:Flash CS4
  • Compétences: Non communiqué.

Posté 24 July 2008 - 01:21 PM

Citation (nicoptere @ Jul 24 2008, 12:54 PM) Voir le message
et un exemple de string retournée:

00000000000000000000000000....


C'est jolie icon_biggrin.gif Tu m'as donné envie de retrouver mon projet si j'ai du nouveau je post icon_wink.gif
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !"

Albert Einstein
0

#13 Utilisateur non-connecté   nicoptere

  • MovieSlip
  • Groupe : Modérateurs
  • Messages : 3789
  • Inscrit : 16-January 06
  • Gender:Male
  • Location:Paris
  • Version logiciel:CS 10.000
  • Compétences: Développeur Actionscript 3.

Posté 25 August 2008 - 08:34 AM

auto update :

- je viens de trouver un article sur la manipulation de bits : http://realtimecolli....net/blog/?p=78
c'est assez dense mais je ne désespère pas smile.gif

j'ai fait un petit article sur la squelettisation : http://www.nicoptere...p/2008/08/12/47
c'est tout ^^
0

#14 Utilisateur non-connecté   tibibi

  • Ceinture d'Orion
  • Groupe : Modérateurs
  • Messages : 1694
  • Inscrit : 18-August 07
  • Gender:Male
  • Location:Aix-en-Provence
  • Interests:Le Surf,
    Le Jazz,
    La Guitar,
    La MS des Forex
  • Version logiciel:Flash CS4
  • Compétences: Non communiqué.

Posté 25 August 2008 - 10:02 AM

Citation (nicoptere @ Aug 25 2008, 09:34 AM) Voir le message
auto update :

- je viens de trouver un article sur la manipulation de bits : http://realtimecolli....net/blog/?p=78
c'est assez dense mais je ne désespère pas smile.gif

j'ai fait un petit article sur la squelettisation : http://www.nicoptere...p/2008/08/12/47
c'est tout ^^


Wouah icon_exclaim.gif Ça gère icon_exclaim.gif

Merci pour cette article. Jsuis vraiment trop nul icon_sad.gif moi j'ai jamais réussi une belle squelettisation. Merci pour tes sources icon_biggrin.gif

++icon_wink.gif
"La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !"

Albert Einstein
0

#15 Utilisateur non-connecté   Fidiman

  • Habitué
  • Groupe : Habitués
  • Messages : 643
  • Inscrit : 13-September 06
  • Logiciels utilisés:Flash CS4 - FD
  • Gender:Male
  • Version logiciel:CS4
  • Compétences: Développeur Actionscript 3.

Posté 25 August 2008 - 01:16 PM

Ils avaient pas dit qu'il fallait faire les beaux arts pour etre baleze en traitement d'image icon_lol.gif

Euh sinon, dans la vraie vie, ça sert à quoi ce genre d'algo ? Est ce qu'il y a des applis grands publics qui utilsent ce genre de calculs ?
A propos de l'huile de palme...

"Computers are incredibly fast, accurate and stupid; humans are incredibly slow, inaccurate and brilliant; together they are powerful beyond imagination" - Albert Einstein
0

#16 Utilisateur non-connecté   nicoptere

  • MovieSlip
  • Groupe : Modérateurs
  • Messages : 3789
  • Inscrit : 16-January 06
  • Gender:Male
  • Location:Paris
  • Version logiciel:CS 10.000
  • Compétences: Développeur Actionscript 3.

Posté 25 August 2008 - 02:34 PM

Citation (Fidiman @ Aug 25 2008, 12:16 PM) Voir le message
Ils avaient pas dit qu'il fallait faire les beaux arts pour etre baleze en traitement d'image icon_lol.gif

Euh sinon, dans la vraie vie, ça sert à quoi ce genre d'algo ? Est ce qu'il y a des applis grands publics qui utilsent ce genre de calculs ?

smile.gif
sûr que c'est pas la voie la plus simple pour y arriver ^^

pour les applications, la plus répandue est l'OCR:
http://www.developpe...ej/#post3550313
on squelettise les lettres et on les ramène à un set de points très reconnaissables (cf. les chiffres dans son exemple)

idem pour reconnaître une forme. si on sait grosso modo à quoi on doit aboutir en terme de points, on peut faire travailler l'algo et comparer le résultat à des sets de points déterminés (des pre-sets). on pourrait donner X morphologies de visages et lui faire chercher sur une image des ensembles correspondant à ces sets.
ou encore segmenter un espace pour isoler des éléments.
parcontre il y a des chances qu'il faille se créer un réseau neuronal pour discriminer tout seul les formes qui matchent le motif qu'on cherche. je me dis que c'est une autre paire de manches.

ce qui m'intéresse ce sont les terminaisons et les intersections. ça peut vraiment servir beaucoup beaucoup.
mettons pour modéliser des avatars animés à partir d'une image fixe (leur donner un squelette).
ça peut envoyer pour déformer une grille.
ou pour initialiser un moteur 2D à partir d'une image.
comme dit dans mon remarquable article, on peut rescaler violemment le truc et il continue de matcher à peu près bien, tout en cassant les temps de traitement, donc c'est exploitable ^^



0

#17 Utilisateur non-connecté   Fidiman

  • Habitué
  • Groupe : Habitués
  • Messages : 643
  • Inscrit : 13-September 06
  • Logiciels utilisés:Flash CS4 - FD
  • Gender:Male
  • Version logiciel:CS4
  • Compétences: Développeur Actionscript 3.

Posté 25 August 2008 - 06:56 PM

et oui evidemment l'ocr...

chapeau en tout cas gourou.gif
A propos de l'huile de palme...

"Computers are incredibly fast, accurate and stupid; humans are incredibly slow, inaccurate and brilliant; together they are powerful beyond imagination" - Albert Einstein
0

Page 1 sur 1
  • Vous ne pouvez pas créer de sujet
  • Vous ne pouvez pas répondre au sujet

1 utilisateur(s) dans ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)