Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » grafik aus einer access-DB lesen...

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.08.2006, 18:09 Uhr
mmc20
puss in boots


hi,
ich muss eine grafik (tif) aus einer access-DB lesen/anzeigen, das ganze liegt im recordset als "CLongBinary" vor, jetzt muss ich das ganze nur noch irgendwie in ein "Gdiplus::Image" reinbekommen, damit ich das anzeigen kann.

weiss wer rat ?

Dieser Post wurde am 30.08.2006 um 18:09 Uhr von mmc20 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.08.2006, 18:29 Uhr
xXx
Devil


hmm evt. das du da ne temp. datei draus machst?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.08.2006, 18:39 Uhr
mmc20
puss in boots


hat ich mir auch schon überlegt, den umweg wollte ich aber nicht gehen, weil ich zZ auch keine ahnung hab wie ich an die daten rankommen kann, CLongBinary hält ja "nur" ein HGLOBAL.

oder kann ich das einfach serialisieren ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.08.2006, 23:28 Uhr
Spacelord
Hoffnungsloser Fall


CreateStreamOnHGlobal liefert dir nen Zeiger auf nen IStream Objekt.
Damit solltest du den Image Konstruktor füttern können.

Gruss Spacelord
--
.....Ich mach jetzt nämlich mein Jodeldiplom.Dann hab ich endlich was Eigenes.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
31.08.2006, 18:08 Uhr
mmc20
puss in boots


sooo...

hab mal n'bissl rumgebastelt, aber zu nem ergebnis bin ich nicht gekommen
hab versucht daraus nen stream zu machen und den dann mit Image::FromStream() zu laden

C++:
void XImageView::SetPictureFromDB(CLongBinary &lbData)
{
    if ( pImage ) delete pImage;

    m.dZoom = 1.0;
    m.topLeft.x = 0;
    m.topLeft.y = 0;

    IStream  *pstm = NULL;
    HRESULT  hr;
    Gdiplus::Status stat;
    
    hr = ::CreateStreamOnHGlobal( lbData.m_hData, FALSE, &pstm );
    pImage = Gdiplus::Image::FromStream( pstm );
    stat = pImage->GetLastStatus();
//    pstm->Release();
}


hr liefert 0
stat liefert invalidParameter
muss ich den stream noch öffnen oder so, irgend etwas fehlt da doch noch !

hab dann versucht mal ein tempfile zu schreiben,
also den datentyp von CLongBinary auf CByteArray geändert ( und diverse kleine anpassungen )
und das ganze array mal mittels serialize in ein file geschrieben, und siehe da ! es geht auch nicht ! naja, das file wird geschrieben, der inhalt stimmt auch fast mit dem orginal überein.
da hängt noch was vorne und hinten an den daten, muss was mit OLE zu tun haben, da steht quasi der name und der pfad der .tif drin (also der als es in die datenbank geschrieben wurde)... wie bekomme ich das weg? hat das ne feste länge, oder gibts da nen header zu?

Dieser Post wurde am 31.08.2006 um 18:09 Uhr von mmc20 editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
01.09.2006, 17:05 Uhr
mmc20
puss in boots


it works !

jetzt funktioniert es, wäre ja auch gelacht wenn nicht !

der haken an der sache war, das die .tif's mittels access in die tabelle "gezogen" wurden, dadurch ist es kein reines tif mehr, da wird so ne art OLE-header mitgespeichert. desshalb steht auch im access in der datenspalte "paket". wenn ich die tiffs über den recordset in die datenbank schreibe steht dort "Long binary-Daten", und dann bekomm ich sie auch in den stream (bzw in das Gdiplus::Image).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: