Bonjour ,
Je m'inspire de la Faq Delphi pour dessiner une
image dans un composant DBgrid
http://delphi.developpez.com/faq/?pa...herimagedbgrid

J'extraie des images depuis un SGBD Firebird 2.1

J'ai du modifier l'existant afin de l'adapter a C++Builder 6 pro
J'ai tenu compte des explication fournie sur le blob ,expliqués dans le message donné en lien

Code C++ : 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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
void __fastcall TFrmAnnu::DBGTelDrawColumnCell(TObject *Sender,
      const TRect &Rect, int DataCol, TColumn *Column,
      TGridDrawState State)
{

if(Column->FieldName=="IMAGE"){

   TMemoryStream *pMs= new TMemoryStream();
   Graphics::TBitmap *pBitmap=new Graphics::TBitmap;

   // pointeur sur TGraphicField modif ici par rapport au code Delphi
   TGraphicField *pGF=(TGraphicField *)(Column->Field);
   //pGF->SetFieldType(ftBlob);
    // TGraphicField *pGF =dynamic_cast<TGraphicField *>(Column->Field);
   try {

      // test mis ulterieurement pour enregistrer l'image voir fin de message
         pGF->SaveToStream(pMs);

/* oblige de faire comme ceci sinon erreur de compil
[C++ Erreur] FormAnnuaire2.cpp(52): E2247 '_fastcall TMemoryStream::SetSize(const __int64)' n'est pas accessible
*/  
     // recule de 8 octect pour lire l'image en question
       int SizeFlux=pMs->Size - 8;
       pMs->SetSize(/*pMs->Size - 8*/ SizeFlux);
       pMs->Seek(__int64(8), soFromBeginning) ;



        pBitmap->LoadFromStream(pMs);
        
DBGTel->Canvas->CopyRect(Rect, pBitmap->Canvas, pBitmap->Canvas->ClipRect);

   }__finally{

           delete pMs;
           delete pBitmap;
          
   }


 } else{
  DBGTel->DefaultDrawDataCell(Rect, Column->Field, State);

}

}

le débogueur s'arrête sur
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
pBitmap->LoadFromStream(pMs);
donc a mon avis c'est la ligne d'avant qui plante avec le message

---------------------------
Notification d'une exception du débogueur
---------------------------
Le projet Annuaire_TClientDataSet_Multitable_champ_auto.exe a provoqué une classe d'exception EInvalidGraphic avec le message 'Image bitmap incorrecte'. Processus stoppé. Utilisez Pas-à-pas ou Exécuter pour continuer.
---------------------------
OK Aide
---------------------------
Si je désactive cette partie

Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
 
*/ oblige de faire comme ceci sinon erreur de compil
[C++ Erreur] FormAnnuaire2.cpp(52): E2247 '_fastcall TMemoryStream::SetSize(const __int64)' n'est pas accessible
*/  
     // recule de 8 octect pour lire l'image en question
       int SizeFlux=pMs->Size - 8;
       pMs->SetSize(/*pMs->Size - 8*/ SizeFlux);
       pMs->Seek(__int64(8), soFromBeginning) ;
l'image ne s'affiche pas mais cela ne plante pas

J'ai quelques questions :
-Ou est mon erreur ?
-Autre chose faut il modifier des propriétés dans le contrôle DbGrid ?
-Quelle modif pour afficher une image Jpeg ou un GIf ?
merci par avance



ps: j'ai mis ce test (partie code en orange)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 static int i=0 ;
         pGF->SaveToStream(pMs);
         pGF->SaveToFile("TEST"+(AnsiString)i+".bmp");
         i++;
J'ai mon image qui apparait bien dans un logiciel de photo