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 :

Mettre jpeg depuis Oracle dans objet Timage


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 182
    Par défaut Mettre jpeg depuis Oracle dans objet Timage
    J'ai une base Oracle 9 dans laquelle je stocke des images dans des champs BLOB.
    Mon but est d'afficher ses images dans un objet Timage.
    J'y arrive bien lorsque l'image est un BMP au travers des lignes de code suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var BlobField: TField;
         BS: TStream;
    begin
      Blobfield := Qry_Photo.FieldByName('PHOTO');
      BS := CreateBlobStream(BlobField, bmRead);
      Image1.Picture.Bitmap.LoadFromStream(BS);
    end;
    mais je n'arrive pas à le faire lorsque mon image est au format JPEG
    J'y arrive également si c'est un ico au travers de la ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Image1.Picture.Icon.LoadFromStream(BS)
    Help.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 096
    Par défaut
    tu dois faire la conversion avec un TJPEGImage
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 182
    Par défaut
    J'ai bien essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var BlobField: TField;
         BS: TStream;
         DummyJPEg: TJPEGImage;
    begin
      Blobfield := Qry_Photo.FieldByName('PHOTO');
      BS := CreateBlobStream(BlobField, bmRead);
      ImageJPEg := TJPEGImage.Create();
      ImageJPEg.LoadFromStream(BS);
      Image1.Assign(ImageJPEg);
    end;
    mais cela me renvoit lorsque j'arrive sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImageJPEg.LoadFromStream(BS);
    Je suis obligé de passé par un TStream car l'image n'est pas physiquement sur ma machine (je ne peux utiliser loadfromfile) mais je dois mal le faire.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 940
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 940
    Billets dans le blog
    6
    Par défaut
    l'erreur correspond à "fichier non jpeg" : vérifie s'il commence bien par FFD8, si le stream est passé avec une position à 0, ou teste en passant par un fichier et essaye de l'ouvrir avec Xn View ou autre
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 182
    Par défaut
    Je n'ai pas essayé de l'ouvrir par Xn View mais je réussi bien à le faire par PaintShop Pro5.
    Comment faire pour savoir si il commence bien par FFD8?
    Je bloque vraiment alors que cela devrait être tout bête, non.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    182
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 182
    Par défaut
    Cela fonctionne maintenant.
    Voici mon code final pour ceux que cela pourrait interesser :
    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
    20
    21
    22
    23
    var
       BlobField: TField;
       BS: TStream;
       ImageJPEg: TJPEGImage; 
    begin
       with Qry_Photo do
          if Eof then
             Image1.Picture.Assign(nil)
          else
          begin
             Blobfield := FieldByName('PHOTO');
             BS := CreateBlobStream(BlobField, bmRead);
             try
                ImageJPEg := TJPEGImage.Create();
                ImageJPEg.LoadFromStream(BS);
                Image1.Picture.Bitmap.Assign(ImageJPEg);
             except
                BS := CreateBlobStream(BlobField, bmRead);
                Image1.Picture.Bitmap.LoadFromStream(BS);
             end;
             BS.Free;
          end;
    end;
    Merci de votre aide.

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

Discussions similaires

  1. EInvalidGraphic sur chargement d'un jpeg dans un TImage
    Par tomtom7 dans le forum C++Builder
    Réponses: 3
    Dernier message: 22/02/2007, 12h54
  2. Pb pour changer la taille d'un Objet TImage dans une Form
    Par Gouyon dans le forum C++Builder
    Réponses: 10
    Dernier message: 06/06/2006, 18h01
  3. Mettre une image png dans un Timage
    Par Coussati dans le forum Composants VCL
    Réponses: 7
    Dernier message: 02/03/2006, 18h05
  4. Réponses: 4
    Dernier message: 01/10/2005, 17h59

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