此章节只介绍大恒水星系列USB3.0 2621彩色相机的使用
该相机具有硬触发和软触发两种方式:此处只介绍硬触发后通过相机回调函数采集图片。
void CaptureHandleEvent::DoOnImageCaptured(CImageDataPointer& objImageDataPointer, void* pUserParam)
{
try
{
//TIMED_FUNC(timerFunObj);
GX_VALID_BIT_LIST emValidBits = GX_BIT_0_7;
if (objImageDataPointer.IsNull())
{
throw std::runtime_error("NULL pointer dereferenced");
}
if (/*(m_objImageProcessPtr.IsNull()) ||*/ (objImageDataPointer.IsNull()))
{
throw std::runtime_error("NULL pointer dereferenced");
}
int nWidth = objImageDataPointer->GetWidth();
int nHeight = objImageDataPointer->GetHeight();
BYTE* pTemp = (BYTE*)objImageDataPointer->ConvertToRGB24(emValidBits, GX_RAW2RGB_ADAPTIVE, false);
{
for (int i = 0; i < nWidth * nHeight; i++)
{
if (!m_bColorFilter) // 判断是否是彩色相机
{
m_pImageBuf[i] = pTemp[3 * i + 2];
m_pImageBuf[i + nWidth * nHeight] = pTemp[3 * i + 1];
m_pImageBuf[i + 2 * nWidth * nHeight] = pTemp[3 * i];
}
else
{
m_pImageBufR[i] = pTemp[3 * i + 2];
m_pImageBufG[i] = pTemp[3 * i + 1];
m_pImageBufB[i] = pTemp[3 * i];
}
}
}
QDateTime currentTime = QDateTime::currentDateTime();
QString strCurrentTime = currentTime.toString("yyyy_MM_dd_hh_mm_ss_zzz");
HObject hImage;
GenImage3(&hImage, "byte", nWidth, nHeight,
Hlong(m_pImageBufR),
Hlong(m_pImageBufG),
Hlong(m_pImageBufB));
QString localfileName = "D:\\GxTest\\"+ strCurrentTime;
WriteImage(hImage, "jpeg", 0, localfileName.toStdString().data());
}
catch (...)
{
LOG(ERROR) << "Error";
}
}