|
|
От: |
tiam
|
|
| Дата: | 17.11.06 12:47 | ||
| Оценка: | |||
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);
}