qt之开发大恒usb3.0相机三

上一篇大恒相机的开发 是基于Qt Creator msvc工具链编译的,大恒相机msvc使用的的lib库是c++版的。如果想要使用mingw工具链开发大恒相机,那么找连接对相应的lib库。mingw对应的库是c的。

配置如下:

图像获取核心代码如下

cpp 复制代码
void __stdcall Widget::OnFrameCallbackFun(GX_FRAME_CALLBACK_PARAM* pFrame)
{
    Widget *pDlg = (Widget*)(pFrame->pUserParam);
    int nImageHeight = pDlg->m_nImageHeight;
    int nImageWidth  = pDlg->m_nImageWidth;

    if (pFrame->status == 0)
    {
        memcpy(pDlg->m_pBufferRaw,pFrame->pImgBuf,pFrame->nImgSize);

        // 黑白相机需要翻转数据后显示
        for(int i =0;i <nImageHeight;i++)
        {
            memcpy(pDlg->m_pImageBuffer+i*nImageWidth, pDlg->m_pBufferRaw+(nImageHeight-i-1)*nImageWidth,(size_t)nImageWidth);
        }

        //pDlg->DrawImg();

        // 图像保存处理
        QImage img(pDlg->m_pImageBuffer,pDlg->m_nImageWidth,pDlg->m_nImageHeight,QImage::Format_Indexed8);
        emit pDlg->imageReady(img);
    }
}
bool  Widget::PrepareForShowImg()
{
    //---------------------------------------------------------------------
    //----------------------初始化bitmap头---------------------------------
    m_pBmpInfo								= (BITMAPINFO *)m_chBmpBuf;
    m_pBmpInfo->bmiHeader.biSize			= sizeof(BITMAPINFOHEADER);
    m_pBmpInfo->bmiHeader.biWidth			= (LONG)m_nImageWidth;
    m_pBmpInfo->bmiHeader.biHeight			= (LONG)m_nImageHeight;

    m_pBmpInfo->bmiHeader.biPlanes			= 1;
    m_pBmpInfo->bmiHeader.biBitCount		= 8; // 黑白图像为8
    m_pBmpInfo->bmiHeader.biCompression		= BI_RGB;
    m_pBmpInfo->bmiHeader.biSizeImage		= 0;
    m_pBmpInfo->bmiHeader.biXPelsPerMeter	= 0;
    m_pBmpInfo->bmiHeader.biYPelsPerMeter	= 0;
    m_pBmpInfo->bmiHeader.biClrUsed			= 0;
    m_pBmpInfo->bmiHeader.biClrImportant	= 0;

    // 黑白图像需要初始化调色板
    for(int i=0;i<256;i++)
    {
        m_pBmpInfo->bmiColors[i].rgbBlue	=i;
        m_pBmpInfo->bmiColors[i].rgbGreen	=i;
        m_pBmpInfo->bmiColors[i].rgbRed		=i;
        m_pBmpInfo->bmiColors[i].rgbReserved=0;
    }

    //--------------------------------------------------------------------------
    //------------------------图像数据Buffer分配---------------------------------
    //为原始图像数据分配空间
    m_pBufferRaw = new BYTE[(size_t)m_nPayLoadSize];
    if (m_pBufferRaw == NULL)
    {
        return false;
    }

    //为经过翻转后的图像数据分配空间
    m_pImageBuffer = new BYTE[(size_t)(m_nImageWidth * m_nImageHeight)];
    if (m_pImageBuffer == NULL)
    {
        delete []m_pBufferRaw;
        m_pBufferRaw = NULL;

        return false;
    }

    return true;
}

有需要源码的话联系咸鱼号 solar.

相关推荐
lly20240610 小时前
PHP 运算符
开发语言
txinyu的博客10 小时前
make_shraed & make_unique 替代了new ? 什么场景使用new
开发语言·c++·算法
不会c嘎嘎11 小时前
QT中的常用控件(五)
服务器·开发语言·qt
你不是我我11 小时前
【Java 开发日记】我们来说一下无锁队列 Disruptor 的原理
java·开发语言
一只小bit11 小时前
Qt 重要控件:多元素控件、容器类控件及布局管理器
前端·c++·qt
期待のcode11 小时前
Java虚拟机堆
java·开发语言·jvm
Larry_Yanan11 小时前
Qt多进程(十)匿名管道Pipe
开发语言·qt
一条咸鱼_SaltyFish11 小时前
Spring Cloud Gateway鉴权空指针惊魂:HandlerMethod为null的深度排查
java·开发语言·人工智能·微服务·云原生·架构
Boilermaker199219 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
MM_MS19 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作
开发语言·人工智能·深度学习·算法·目标检测·计算机视觉·视觉检测