如何将Mat图像保存到QByteArray?

时间:2018-08-22 01:19:44

标签: qt opencv qbytearray

我需要通过TCP将已处理的图像文件传输到我的计算机。现在我不知道如何将Mat转换为Qbytearray,我希望Qbytearray是一个编码图像文件,因此我可以轻松地将其保存在Web应用程序中。 我试图使用imencode将Mat保存为向量,然后将其转换为Qbytearray,但是我摔倒了。该程序刚刚崩溃。谢谢。

void test(const HWND hwnd, const int w, const int h)
{
    auto hdc = GetDC(hwnd);

    //use the negative value of height, so bitmap bits are not upside-down
    BITMAPINFOHEADER bi = { sizeof(bi), w, -h, 1, 32, BI_RGB };

    DWORD* buffer;
    auto hbitmap = CreateDIBSection(hdc, (BITMAPINFO*)&bi, DIB_RGB_COLORS,
        (void**)&buffer, NULL, 0);

    auto memdc = CreateCompatibleDC(hdc);
    auto oldbmp = SelectObject(memdc, hbitmap);

    for(int i = 0; i < w * h; ++i) buffer[i] = 0xFF0000;
    BitBlt(hdc, 0, 0, w, h, memdc, 0, 0, SRCCOPY);

    //draw black square on top-left
    for(int y = 0; y < 100; y++)
        for(int x = 0; x < 100; x++)
            buffer[y * w + x] = 0;
    BitBlt(hdc, 0, 0, 100, 100, memdc, 0, 0, SRCCOPY);

    //cleanup:
    SelectObject(memdc, oldbmp);
    DeleteObject(hbitmap); //<- buffer is not valid after hbitmap is destroyed
    DeleteDC(memdc);
    ReleaseDC(hwnd, hdc);
}

错误是:下级停止是因为它收到了来自操作系统的信号。错误发生在最后一行。

0 个答案:

没有答案