2015-11-22 37 views
0

我到C++得到調用(...)方法結果的類型VARIANT * 變種var.bmp圖像。SAFEARRAY *到的QByteArray

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

如何將其從SAFEARRAY(BYTE)轉換爲QByteArray?或者如何獲得QImage(QPixmap,QBitmap)?謝謝/。

+0

沒有轉換,你必須創建一個新的QByteArray並複製元素。 –

+3

'SAFEARRAY *'指針位於'var.parray'中。使用'SafeArrayGetLBound'和'SafeArrayGetUBound'來確定它的大小(記住邊界是包含的;大小是'ubound-lbound + 1'),'SafeArrayAccessData'獲得一個指向原始數據的指針。用'QByteArray :: fromRawData'將它包裝在'QByteArray'中。一旦完成,確保'SafeArrayUnaccessData'和'VariantClear'。 –

回答

2

伊戈爾,非常感謝!

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);