SAFEARRAY* в QByteArray

Я получаю результат метода С++ invoke(...) в типе VARIANT * var. var – это изображение .bmp.

qDebug() << var.vt; //8209 ~ VT_ARRAY|VT_UI1 ~ SAFEARRAY(BYTE)

Как преобразовать его из SAFEARRAY(BYTE) в QByteArray? Или как получить QImage (QPixmap, QBitmap)? Спасибо/.


person magrif    schedule 22.11.2015    source источник
comment
Преобразования нет, вам придется создать новый QByteArray и скопировать элементы.   -  person Hans Passant    schedule 22.11.2015
comment
Указатель SAFEARRAY* находится в var.parray. Используйте SafeArrayGetLBound и SafeArrayGetUBound, чтобы определить его размер (помните, что границы включены; размер равен ubound-lbound+1), и SafeArrayAccessData, чтобы получить указатель на необработанные данные. Оберните его QByteArray с помощью QByteArray::fromRawData. Не забудьте SafeArrayUnaccessData и VariantClear, когда закончите.   -  person Igor Tandetnik    schedule 23.11.2015


Ответы (1)


Игорь, большое спасибо!!!

long iLBound, iUBound;
char * data;
SafeArrayGetLBound(AFingerImage.parray, AFingerImage.parray->cDims, &iLBound);
SafeArrayGetUBound(AFingerImage.parray, AFingerImage.parray->cDims, &iUBound);
SafeArrayAccessData(AFingerImage.parray,(void**)(&data));
long sz = iUBound - iLBound + 1;
QByteArray ba = QByteArray::fromRawData(data,sz);
FPImage.loadFromData(ba);
SafeArrayUnaccessData(AFingerImage.parray);
person magrif    schedule 23.11.2015