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 surdonc a mon avis c'est la ligne d'avant qui plante avec le message
Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part pBitmap->LoadFromStream(pMs);
Si je désactive cette partie---------------------------
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
---------------------------
l'image ne s'affiche pas mais cela ne plante pas
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) ;
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)
J'ai mon image qui apparait bien dans un logiciel de photo
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++;
Partager