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

Delphi Discussion :

Charger une image � partir d'une chaine HEXA


Sujet :

Delphi

  1. #1
    Membre confirm�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Par d�faut Charger une image � partir d'une chaine HEXA
    Bonjour,

    J'aimerai faire un truc un peu sp�cial.
    J'aimerai g�n�r� une TImage � partir d'une chaine de caract�re qui serait en fait une suite de nombre H�xad�cimal repr�sentant un bitmap.

    En fait je prend un projet (VCL/Forms) tout b�te j'ajoute un composant TImage puis depuis la propri�t� Picture j'ouvre une image BMP. Ensuite je vais dans le DFM et la je trouve mon image sous la forme :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      object Image1: TImage
        Left = 32
        Top = 216
        Width = 73
        Height = 73
        Picture.Data = {      07544269746D6170A6020000424DA60200000000000036000000280000001000      00000D0000000100180000000000700200000000000000000000000000000000      0000000000000000000000000000000000000000000000000000000000000000      0000000000000000000000000000000000000000000000000000000000000000      0000000000000000000000000000000000000000000000000000000000000000      0000000000000000000000000000000000000000000000000000000000000000      0000000000000000000000000000000000000000000000000000000000000000      0000000000000000000000000000000000000000000000000000000000000000      0000000000000000000000000000000000000000000000000000000000000000     0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000      0000000000000000000000000000000000000000000000000000000000000000      0000000000000000000000000000000000000000000000000000000000000000      0000000000000000000000000000000000000000000000000000000000000000      0000000000000000000000000000000000000000000000000000000000000000      0000000000000000000000000000000000000000000000000000000000000000      0000000000000000000000000000000000000000000000000000000000000000      0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000    0000000000000000000000000000000000000000000000000000000000000000
    0000000000000000000000000000000000000000000000000000000000000000
    000000000000000000000000000000000000}
    J'aimerais simplement reprendre la partie situ�e dans "Picture.Data", la mettre dans un .pas p.ex :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    var
      Image   : AnsiString;
    begin
        Image :=
          '07544269746D6170A6020000424DA60200000000000036000000280000001000' +      '00000D0000000100180000000000700200000000000000000000000000000000' +   '0000000000000000000000000000000000000000000000000000000000000000' +   '0000000000000000000000000000000000000000000000000000000000000000' +    '0000000000000000000000000000000000000000000000000000000000000000' +
     '0000000000000000000000000000000000000000000000000000000000000000' +   '0000000000000000000000000000000000000000000000000000000000000000' +      '0000000000000000000000000000000000000000000000000000000000000000' 
    +      '0000000000000000000000000000000000000000000000000000000000000000' +     '0000000000000000000000000000000000000000000000000000000000000000' +   '0000000000000000000000000000000000000000000000000000000000000000' +    '0000000000000000000000000000000000000000000000000000000000000000' +    '0000000000000000000000000000000000000000000000000000000000000000' +
     '0000000000000000000000000000000000000000000000000000000000000000' +     '0000000000000000000000000000000000000000000000000000000000000000' +      '0000000000000000000000000000000000000000000000000000000000000000' +     '0000000000000000000000000000000000000000000000000000000000000000' +     '0000000000000000000000000000000000000000000000000000000000000000' +      '0000000000000000000000000000000000000000000000000000000000000000' +      '0000000000000000000000000000000000000000000000000000000000000000' +    '0000000000000000000000000000000000000000000000000000000000000000' +'000000000000000000000000000000000000';
    Et hop pas un proc�d� miraculeux que vous aller me d�crire je vais pouvoir la charger dans un TImage.

    Vous avez une id�e ??

  2. #2
    Membre chevronn�

    Homme Profil pro
    Chef de Projet ATIC
    Inscrit en
    Novembre 2005
    Messages
    274
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activit� : Chef de Projet ATIC
    Secteur : Finance

    Informations forums :
    Inscription : Novembre 2005
    Messages : 274
    Par d�faut
    Il me semble que l'on voit dans les dfm le repr�sentation hexa de l'image, comme s'il s'agissait d'un fichier.

    Il faut donc charger l'image via les fonctions LoadFromxxxx (file, stream ou clipboard) des composants TImage.

    Soit tu cr�es un fichier texte, tu y colles tes donn�es, tu fais un LoadFromfile du fichier puis effaces le fichier,

    Soit tu cr�es un TSTream, tu y envoies les donn�es et tu recharges avec un LoadFromStream,

    Ou enfin, tu copies les donn�es dans le presse papiers et les r�cup�re via un LoadFromClipboard.

    Personnellement, j'utilise la m�thode SaveToStream et LoadFromStream pour sauvegarder et recharger des icones, bmp et png choisis par l'utilisateur dans une base de donn�es.

  3. #3
    Expert confirm�
    Avatar de anapurna
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Mai 2002
    Messages
    3 491
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 491
    Par d�faut
    salut

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function StringToComponent(const AString: String; AComp: TComponent): TComponent;
    var
      InputStream: TStringStream;
      OutputStream: TMemoryStream;
    begin
      InputStream := TStringStream.Create(AString);
      OutputStream := TMemoryStream.Create;
      try
        { Turn string into component }
        ObjectTextToBinary(InputStream, OutputStream);
        { Go back to start of output stream }
        OutputStream.Seek(0, soFromBeginning);
        { Read component from stream, creating one if one is not passed in }
        Result := OutputStream.ReadComponent(AComp)
      finally
        InputStream.Free;
        OutputStream.Free
      end
    end;

    @+ Phil

  4. #4
    Membre confirm�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Par d�faut
    Bonsoir !!

    D�ja merci de vos r�ponse.


    anapurna :

    T'as technique ma parait pas mal. Cependant lorsque je la mets en application j'ai l'erreur suivant (Type EParseError) elle est produite par la fonction ObjectTextToBinary :

    OBJECT Excepted on line 1

    As-tu une id�e sur le pourquoi du comment ??

    Okaryn :
    Pour ce qui est de ta solution c'est en effet ce que je pensais faire. Cependant le soucis est que lorsque j'utilise ma grosse chaine de carac�tre et que je la met dans un StringField et que je le load dans un TImage (.Picture.Bitmap.LoadFromStream), il me dit comme quoi mon fichier n'est pas du bon type. Normal vu que le probl�me et que le Stream va transformer ma chaine de caract�re en h�xa au lieu de me la mettre directement en tant qu'image h�xa. Vous voyez ce que je veux dire ??

    En fait faudrait que ma cha�ne de carac�tre soit prise tel quel en m�moire sans typage.

    En tout cas merci de me filer un coup de main.

  5. #5
    Membre confirm�

    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2002
    Messages
    207
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 39
    Localisation : Suisse

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Septembre 2002
    Messages : 207
    Par d�faut
    Yeah !! J'ai compris !!!

    En fait la fonction StringToComponent fonctionne tout � fait bien. Mais j'avais pas compris que fallait mettre vraiment toute la partie relative au composant du DFM dans la String!! Du coup je met vraiment tout le TImage complet dans ma chaine de carac�tre et on est content, fait beau les mouches p�tes !!

    Top Cool.

    Je vais impl�menter tout �a !! Merci beaucoup pour votre aide....

    PS au mod�rateur : Je termine le poste quand je suis s�re que tout marche.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 2
    Dernier message: 29/03/2013, 14h14
  2. Charger une image � partir d'une collection d'images
    Par toutounesan dans le forum VB.NET
    R�ponses: 34
    Dernier message: 15/06/2011, 11h16
  3. Saisir une image � partir d'une photo ou d'une vid�o
    Par lohengrin56 dans le forum Flash/Flex
    R�ponses: 0
    Dernier message: 07/07/2009, 16h17
  4. R�ponses: 7
    Dernier message: 07/07/2008, 11h18
  5. afficher une image � partir d'une base de donn�es access
    Par zidenne dans le forum Bases de donn�es
    R�ponses: 2
    Dernier message: 08/11/2005, 11h41

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