cs_orelien
Messages postés137Date d'inscriptiondimanche 7 juillet 2002StatutMembreDernière intervention11 janvier 2009
-
27 nov. 2007 à 21:03
pepere28
Messages postés3Date d'inscriptionlundi 22 octobre 2007StatutMembreDernière intervention21 février 2008
-
20 févr. 2008 à 07:57
Bonjour,
J'aimerais savoir comment ecrire et lire le contenu d'une image dans/depuis un fichier texte.
Après avoir crée une image dynamiquement, je souhaiterais l'enregistrer dans un fichier texte pour pouvoir par la suite la réouvrir en lisant ce même fichier.
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 27 nov. 2007 à 22:39
Bonsoir,
En codant par exemple ton image en base 64 (codage MIME). Cette méthode est couramment employée dans les newsgroups pour transférer des données binaires de façon "lisible".
Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
Pourquoi pas la méthode simple ? En enregistrant un bitmap au fichier on texte, on le bousille. Le savetofile('C:\MonImage.txt') va fonctionner mais le loadfromfile('C:\MonImage.txt') va planter
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 28 nov. 2007 à 12:30
Salut,
Hola ... Le fait de changer l'extension du fichier ne va rien modifier dans la structure du fichier, il reste le même.
Par contre à la lecture il va planter ... mais pas à cause de la structure du fichier mais à cause de l'extension.
En effet la fonction qui se charge de lire le fichier contrôle d'abord l'extension, si celle ci n'est pas du format attendu il déclenche une erreur.
Et pour corriger ce problème il suffit de changer l'extension .TXT en .BMP (pour un bitmap bien sûr)
J'ai ouvert un ficher bitmap avec le blocnote je l'ai enregistré sous un format txt. J'ai supprimé l'image réouvert le fichier texte et enregistré sous un format bmp. Tu sais quoi ? le fichier c'est crouté
Hormis ce beug dans windows , tu as totalement raison ca ne change pas le fichier.
Je me suis mal exprimé : si tu changes l'extension ton fichier il est plus utilisable tel quel, donc il est plus "utilisable" donc ca revient à le bousiller.
Mais je vois pas trop l'intéret de le metter au format txt : ca prend la meme place.
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 28 nov. 2007 à 15:04
salut,
je suppose qu'il veux/doit passer le fichier à un endroit qui n'accept que les fichiers text pure. (ce qui était le premier but de l'encodage b64: passer les server qui ne suportaient que l'asci 7bits.)
par exemple un xml?
sinon, je ne vois pas l'intérêt non plus.
A+
Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
WhiteHippo
Messages postés1154Date d'inscriptionsamedi 14 août 2004StatutMembreDernière intervention 5 avril 20123 28 nov. 2007 à 17:44
Ce qui serait plutot pas mal, c'est que l'interessé se manifeste ! Histoire de savoir où l'on en est...
Donc, Orelien
qu'est ce que tu penses de tout ça ?
Cordialement.
<hr />"L'imagination est plus importante que le savoir." Albert Einstein
cs_orelien
Messages postés137Date d'inscriptiondimanche 7 juillet 2002StatutMembreDernière intervention11 janvier 2009 30 nov. 2007 à 02:44
Bonsoir,
Merci également de vos réponses.
WhiteHippo (pas besoin de le mettre en gras ), désolé de ne pas avoir répondu plus tôt, question d'emploi du temps.
J'ai pu testé les procedure de Guillemouze qui fonctionne chez moi, mais pour ce qui est de l'encodage en base64 je n'arrive pas à l'exploiter .
Effectivement, on souhait est de passer le codage texte d'une image dans un fichie xml puor ensuite pouvoir le réexploiter en lisant son contenu dont l'image.
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 30 nov. 2007 à 09:08
salut,
l'encodage 64 est un sujet connu (et vieux). tu ne devrait pas avoir de problème à trouver un code d'exemple.
Pour faire tes tests, regarde bien les cas ou tu doit compléter avec des "=". c'est la seul difficulté.
bon code!
Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
cs_orelien
Messages postés137Date d'inscriptiondimanche 7 juillet 2002StatutMembreDernière intervention11 janvier 2009 1 déc. 2007 à 19:41
Bonsoir,
J'ai utlisé le code de Guillemouze combiné à celui de Francky23012301 par ex. et tout fonctionne bien mais le souci est que en fonction de l'image, le traitement base64 peut parfois durer assez longtemps
Quelqu'un aurait-il une solution plus rapide en terme d'encodage/decodage d'image ?
Merci
function Encode64(S: string): string;
var
i: Integer;
a: Integer;
x: Integer;
b: Integer;
w: Integer;
begin
Result := '';
w := 0;
a := 0;
b := 0;
SetLength(Result,2*Length(s)) ;
for i := 1 to Length(s) do
begin
x := Ord(s[i]);
b := b * 256 + x;
a := a + 8;
while a >= 6 do
begin
a := a - 6;
x := b div (1 shl a);
b := b mod (1 shl a);
inc(w);
Result[w]:=Codes64[x + 1];
end;
end;
if a > 0 then
begin
x := b shl (6 - a);
inc(w);
Result[w]:=Codes64[x + 1];
end;
SetLength(Result,W);
end;
function Decode64(S: string): string;
var
i: Integer;
a: Integer;
x: Integer;
b: Integer;
w: integer;
begin
Result := '';
w := 0 ;
a := 0;
b := 0;
SetLength(Result,2*Length(s)) ;
for i := 1 to Length(s) do
begin
x := Pos(s[i], codes64) - 1;
if x >= 0 then
begin
b := 64 * b + x;
a := a + 6;
if a >= 8 then
begin
a := a - 8;
x := b shr a;
b := b mod (1 shl a);
x := x mod 256;
inc(w);
Result[w]:=chr(x);
end;
end
else
Exit;
end;
SetLength(Result,W);
end;
Procedure Encode_Image(ImageName,TextName : String);
Var
FS,FR : TFileStream;
S, SR : string ;
Begin
FS:=TFileStream.Create(ImageName,fmOpenRead);
try
SetLength(S,FS.Size);
FS.Read(S[1],FS.Size);
SR := Encode64(S);
FR:=TFileStream.Create(TextName,fmCreate);
try
FR.Write(SR[1],Length(SR));
finally
FR.Free;
end ;
Finally
FS.Free;
End;
End;
Procedure Decode_Image(TextName,ImageName : String);
Var
FS,FR : TFileStream;
S, SR : string ;
Begin
FS:=TFileStream.Create(TextName,fmOpenRead);
try
SetLength(S,FS.Size);
FS.Read(S[1],FS.Size);
SR := Decode64(S);
FR:=TFileStream.Create(ImageName,fmCreate);
try
FR.Write(SR[1],Length(SR));
finally
FR.Free;
end;
Finally
FS.Free;
End;
End;
// Exemple d'utilisation
procedure TForm1.Button1Click(Sender: TObject);
begin
Encode_Image( 'C:\Temp\Dscf4671.jpg', 'C:\Temp\Dscf4671.txt' ) ;
end;
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 2 déc. 2007 à 13:36
orelien, s'il te plait...
Clique sur réponse acceptée en face des réponses qui te conviennent :
1 - ça fera plaisir à ceux (nombreux) qui se sont investis dans la recherche d'une solution à ton problème,
2 - ça montre que le sujet est résolu.
salim07360
Messages postés17Date d'inscriptionmardi 6 décembre 2005StatutMembreDernière intervention22 janvier 2008 13 janv. 2008 à 12:49
slt , j bien lu ton message , je c pas , j essayé d'appliquer les procedures et les fonctions , que tu viens de les noter sur le forum , mais ça marche pas tjrs sous delphi5 , si tu as une idée comment faire , stp , repond moi , car j besoin de ces procedures , et pas sous delphi7 , car j que le 5 ........merçi !