IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

OleVariant --> Stream


Sujet :

Langage Delphi

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut OleVariant --> Stream
    Bonsoir,
    J'ai installé un controle ActiveX permettant de lire les cartes d'identité électronique (Des ptits belges).
    Je bloque sur un truc qui permet de récupérer la photo.

    Code en VB que je n'arrive pas à convertir en Delphi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Dim picture As Variant
    ....
    picture = MapColPicture.GetValue("Picture")
    writeBinFile "photo.jpg", picture
    ImagePic.picture = LoadPicture("photo.jpg")
    ImagePic.Stretch = True
    ImagePic.Visible = True
    MapColPicture.GetValue("Picture") renvoie un Olevariant devant contenir une succession de bytes (Format image JPEG).

    J'ai essayé un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Var
    Buffer : Array of Byte;
    Begin
    .....
    Photo := TMemoryStream.Create;
    Buffer := Map.GetValue('Picture');
    Photo.Write(Buffer, Length(Buffer));
    Photo.SaveToFile('c:\photo.jpg');
    Photo.Free;
    J'obtiens bien des données dans mon fichier mais il n'est pas lisible.
    Pouvez-vous m'aider ?

    Merci d'avance.

  2. #2
    Membre confirmé
    Avatar de lil_jam63
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    447
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 447
    Points : 600
    Points
    600
    Par défaut
    Avant ton saveToFile, tu devrais faire rembobiner ton stream.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Buffer := Map.GetValue('Picture');
    Photo.Write(Buffer, Length(Buffer));
    Photo.Seek(0, soFromBeginning); // toujours avant de faire un enregistrement ou une lecture complete
    Photo.SaveToFile('c:\photo.jpg');
    Photo.Free;

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Hmmm, le remettre au début pour le lire --> je suis d'accord, mais de le mettre au début pour l'enregistrer, je ne vois aucun changement.
    J'ai tj fais sans le remettre au début et tj de bons résultats.
    Ceci dit, mon fichier est bien créé et sa taille est de 3028 octets. Donc, maintenant, le problème ne vient pas de l'enregistrement mais du formatage alors ?
    Dans la doc, il parle d'image jpeg pourtant

  4. #4
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    Var
    Buffer : Array of Byte;
    Begin
    .....
    Photo := TMemoryStream.Create;
    Buffer := Map.GetValue('Picture');
    Photo.Write(Pointer(Buffer)^, Length(Buffer)); //ICI, essai çà
    Photo.SaveToFile('c:\photo.jpg');
    Photo.Free;

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 085
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 085
    Points : 886
    Points
    886
    Par défaut
    Merci Smyley, ca marche bien.
    J'ai aussi trouvé entre temps ceci qui marche aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Photo.Write(Buffer[0], Length(Buffer));
    Merci à vous.

    A+

  6. #6
    Expert éminent
    Avatar de smyley
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    6 270
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 6 270
    Points : 8 344
    Points
    8 344
    Par défaut
    Citation Envoyé par portu
    J'ai aussi trouvé entre temps ceci qui marche aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Photo.Write(Buffer[0], Length(Buffer));
    Oui, en plus j'ai déjà eu ces pbs, la solution universelle ( et ma préférée ) c'est de faire un Pointeur ( Pointer(blabla)^ ), le petit chapeau est indispensable en passant. Si par exemple tu veux écrire une chaine, il faut faire soit un pointeur, soit Chaine[1], et pour ne pas faire de confusion entre les càs où utiliser 0 ou 1, il vaut donc mieux passer par les pointeurs

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. DirectSound et le streaming
    Par Shakram dans le forum DirectX
    Réponses: 57
    Dernier message: 09/06/2005, 11h05
  2. [BLOB]Enreg Stream dans Field
    Par sbeu dans le forum Bases de données
    Réponses: 2
    Dernier message: 22/03/2004, 16h06
  3. Streaming video sous Linux
    Par freeshman dans le forum Applications et environnements graphiques
    Réponses: 2
    Dernier message: 03/01/2004, 17h17
  4. Streaming fichier PDF
    Par rgarnier dans le forum XMLRAD
    Réponses: 4
    Dernier message: 22/05/2003, 22h14
  5. Comment enregistrer un stream de longueur fixe ?
    Par Alcarbone dans le forum MFC
    Réponses: 5
    Dernier message: 13/04/2003, 20h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo