Optimisation dans la creation de fichier

Résolu
misteraoul Messages postés 23 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 25 novembre 2009 - 1 juil. 2005 à 00:07
misteraoul Messages postés 23 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 25 novembre 2009 - 1 juil. 2005 à 22:54
Voila j'ai fais un petit programme qui ouvre une image bitmap,
l'enregistre bit par bit dans un tableau, effectue quelques traitements
et apres créé une seconde image bitmap modifiée.

Pour creer cette image, je copie l'image initiale et la modifie
bit par bit avec Fileput (vb.NET). Le gros problème c'est que sur les
grosse images sa prend énormement de temps.

J'aimerai savoir si il y a d'autre solution plus rapide afin de
réaliser la meme chose , comme utilisé qu'un seul Fileput pour le tout,
ou au lieu de copier tout le fichier et le modifier par la suite, créer
directement un fichier auquel je mets mes morceaux bout à bout.



En espérant avoir été clair



merci

6 réponses

ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
1 juil. 2005 à 20:14
Donc, ton problème est en fait différent!!!

Il faut, soit convertir le tableau en string via une fonction (???),
soit directement passer par une string et oublier d'utiliser un tableau
(si c'est possible!!!).



Je pense qu'il doit y avoir une instruction qui fait l'inverse que ce que la fonction "Split" fait!



Sinon, pour Chr(), utilise plutôt CStr()... Je pense que ça irra un peu
plus vite (encore que, c'est à tester!). CStr converti le type de ta
variable en type String (qu'importe le type d'origine donc!).



Tient, d'ailleurs, ça me fait pense que tu pourrais essayer ça pour convertir ton tableau en string :


Dim
varTxt
As String

varTxt = CStr(B)


Fileput( Filen(
varTxt)
,
varTxt
, position)



Enjoy

<hr size="2" width="100%">
(Si une réponse vous convient, cliquez sur son bouton "Accepter ...")
3
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
1 juil. 2005 à 00:39
Je code en VB6... Donc, en VB7 ça devrait aussi être faisable!



Il suffit de modifier ton tableau de bits puis, en effet, d'écrire le
buffer d'un coup d'un seul... A condition, évidemment, que le buffer
ait la taille adéquate!

Enjoy

<hr size="2" width="100%">
(Si une réponse vous convient, cliquez sur son bouton "Accepter")
0
misteraoul Messages postés 23 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 25 novembre 2009
1 juil. 2005 à 11:09
Est ce que tu pourrai préciser le code que t'utilise pour faire sa,
parce que la gestion du buffer je connais pas grand chose, donne en VB6
je me débrouillerai a trouver l'équivalent vb.NET



merci
0
ScSami Messages postés 1488 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 3 décembre 2007 24
1 juil. 2005 à 19:13
Oulà, c'est beaucoup m'en demandé ça



Bon, de tête ça doit ressembler à un truc du genre :



Dim varBuffer



Open "monFichier" For Binary As #1

Put #1, varBuffer

Close #1



(Nota : code peut-être faux... je suis un peu naze là... désolé!)



Jack serait mieux te répondre que moi sur cette question...



Mais je pense qu'il faut utiliser ton "FilePut" mais au lieu de
"FilePuter" chaque bit, tu fileputes tout d'un coup... tu comprends où
je suis pas clair là ???

En fait, FilePut doit, je pense, te permettre d'écrire un block d'un
coup et pas seulement bit à bit. Du coup, il suffit de modifier tes
bits dans ta variable (ou taleau ou autre, on s'en fout un peu =>
buffer) puis de balancé cette dernière à l'écriture (FilePut)!



Peut guère te dire mieux... Sinon, refait un post pour avoir l'avis d'autres membres de CodesSources!



Enjoy

<hr size="2" width="100%">
(Si une réponse vous convient, cliquez sur son bouton "Accepter")
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
misteraoul Messages postés 23 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 25 novembre 2009
1 juil. 2005 à 20:06
Oui Fileput peut ecrire tout d'un coup, le problème est que mes données sont dans un tableau au format byte, format impossible a concaténer. De plus la commande fileput demande des données en format texte et convertis lui meme en binaire avant d'ecrire dnas le fichier. La seule solution que j'ai trouvée pour faire tout sa c'est dans ma boucle qui balaye bit par bit :

Fileput( Filenb , Chr(B(position)) , position)

B( ) étant mon tableau de valeur
P.S: de plus l'instruction Chr( ) est assez lente en elle meme

Merci pour tout se que t'as pus me répondre ScSami
0
misteraoul Messages postés 23 Date d'inscription mardi 16 novembre 2004 Statut Membre Dernière intervention 25 novembre 2009
1 juil. 2005 à 22:54
MERVEILLEUX

la fonction CStr n'accepte pas les tableaux de type byte mais avec la fonction inverse de split : join (gentilment donné dans l'aide vb.NET) l'écriture est quasimment instantannée c'est formidable.


FilePut( filenb , Join(BB, "") , 1 )

Et voila, tout est réécris d'un seul coup (j'ai du convertir quand meme BB en string pour le join( ) )

Merci beaucoup ScSami

Peut etre a une prochaine fois
0
Rejoignez-nous