CStatic.setBitmap вызывает мерцание прямоугольника (MFC) в onpaint - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь обновить изображение относительно быстро (например, 10 кадров в секунду), и оно мигает каждые пару кадров.Я сузил область, в которой происходит мигание, до места, где я устанавливаю растровое изображение на CStatic в моем OnPaint.

Код выглядит так:

void CRadarView::OnPaint()
{

    CPaintDC dc(this); // device context for painting

    if (m_streaming == -1 || m_frameThread.fgArr.size() == 0 || m_frameThread.bgArr.size() == 0 || m_frameThread.subtractedFgArr.size() == 0)
        return;


    CDC *screenDC = GetDC();
    CDC mDC;
    mDC.CreateCompatibleDC(screenDC);
    CMemDC memDC(*screenDC, this);
    CDC& rDC = memDC.GetDC();

    // Raw radar image
    //-----------------

    if (m_showRadar)
    {
        CBitmap b1;
        CImage img1;
        getImage(img1, m_frameThread.fgArr);
        b1.CreateCompatibleBitmap(&rDC, m_imageDisplaySize.x, m_imageDisplaySize.y);

        CBitmap *pob1 = rDC.SelectObject(&b1);
        rDC.SetStretchBltMode(HALFTONE);
        if (zoomed){
            img1.StretchBlt(rDC, 0, 0, m_imageDisplaySize.x, m_imageDisplaySize.y, zoomXStart, zoomYStart, zoomXEnd - zoomXStart, zoomYEnd - zoomYStart, SRCCOPY);
        }
        else{
            img1.StretchBlt(rDC, 0, 0, m_imageDisplaySize.x, m_imageDisplaySize.y, 0, 0, img1.GetWidth(), img1.GetHeight(), SRCCOPY);
        }

        rDC.SelectObject(pob1);
        m_image.SetBitmap((HBITMAP)b1); //THIS IS WHERE THE FLASHING IS OCCURING
    }
...