Re[2]: Сохранение QPixmap в базе данных
От: tiam Россия  
Дата: 17.11.06 12:47
Оценка:
Здравствуйте, Tonal-, Вы писали:

T>Эк тебя заколбасило!

T>Открываем MSDN, и читаем про IPicture:
T>

T>...
T>The picture object also supports IPersistStream so it can save and load itself from an instance of IStream.
T>...


Ну вот сделал так — не работает. Записывает в буфер какую-то муть. Что я делаю не так?

            PICTDESC describe;
            memset(&describe, 0, sizeof(describe));
            describe.cbSizeofstruct = sizeof(describe);
            describe.bmp.hbitmap = photo->toWinHBITMAP();
            describe.bmp.hpal = QColormap::hPal();
            describe.picType = PICTYPE_BITMAP;
            LPPICTURE pPicture = 0;
            HRESULT hr = ::OleCreatePictureIndirect(&describe, IID_IPicture, true, (void **) &pPicture);
            if(SUCCEEDED(hr) && (pPicture != NULL)) {
                IStorage* pStg = 0;
                hr = ::StgCreateDocfile(NULL, STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_READWRITE, 0, &pStg);
                if(SUCCEEDED(hr)) {
                    IStream* pStream = 0;
                    pStg->CreateStream(L"PICTURE", STGM_SHARE_EXCLUSIVE | STGM_CREATE | STGM_READWRITE, 0, 0, &pStream);
                    IPersistStream *pPersistStream;
                    if (SUCCEEDED(pPicture->QueryInterface(IID_IPersistStream, (void**)&pPersistStream))) {
                        pPersistStream->Save(pStream, false);
                        ULARGE_INTEGER pcbSize;
                        if(SUCCEEDED(pPersistStream->GetSizeMax(&pcbSize))) {
                            ULONG sizeData = pcbSize.QuadPart;
                            char *data = new char[sizeData];
                            HRESULT hr = pStream->Write(data, sizeData, &sizeData);
                            if (SUCCEEDED(hr)) {
                                QByteArray dataPhoto(data, sizeData);
                                query.bindValue(":Photo", dataPhoto);
                            }


T>P.S. А почему именно OLE-объекты? Чем не устраивает родная Qt-шная сериализация?

T>Или эту базу из VB кто-то мучает?

При открытии в Акцесе рисунки не отображаются, если сохранить просто как бинарные данные.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.