Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8703803
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 13, 20262026-06-13T02:56:52+00:00 2026-06-13T02:56:52+00:00

In old version of opencv we had the class like CvvImage, that were easily

  • 0

In old version of opencv we had the class like CvvImage, that were easily used for MFC controls to display camera images or simple images from the OpenCV. But in 2.4 or 2.3 this support is finished by the OpenCV , i wonder if we have any other class in new version.

My application is MFC SDI and inside view i am over riding the OnPaint function. In previous opencv i was using Paint function like

void CRightCameraView::OnPaint()
{
    CPaintDC dc(this); // device context for painting
    m_CVvimageObj.CopyOf(m_iplImageFrame); //copy IplImage frame

    if(m_bImageDisplay)
    {
    m_CVvimageObj.Show(dc.GetSafeHdc(),10,0,m_CVvimageObj.Width(),m_CVvimageObj.Height());
    }


}

Kindly guide me which is the most update version of class to do same thing and support such DC controls of MFC.

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-13T02:56:53+00:00Added an answer on June 13, 2026 at 2:56 am

    Since i could not find the answer i would like to help others what i did.

    I have extracted cvvimage class manually and added in my project and then i did the following ..

    in my views header file i declared

    CvvImage m_CVvImageObj;
    cv::Mat m_matImage;
    

    inside my CPP file of view , i have called following in initialization function

    m_matImage = cv::imread(strA.GetBuffer(),CV_LOAD_IMAGE_COLOR);   // Read the file
    
    if(! m_matImage.data )                              // Check for invalid input
    {
        AfxMessageBox(L"Could not open or find the image");
    }
    
    
     IplImage iplimg = m_matImage;
     m_CVvImageObj.CopyOf(&iplimg);
     UpdateData();
     Invalidate();
    

    inside the overided function of OnPaint inside view i added

    if(m_CVvImageObj.GetImage())
    {       
        //m_CurrentFrame.Show
            m_CVvImageObj.Show(dc.GetSafeHdc(),10,0,m_CVvImageObj.Width(),m_CVvImageObj.Height());
    }
    

    Cvvimage h file is the following

    #pragma once
    
    //#pragma once  
    #ifndef CVVIMAGE_CLASS_DEF  
    #define CVVIMAGE_CLASS_DEF  
    
    #include <opencv2\highgui\highgui.hpp>    
    class CvvImage  
    {  
    public:  
        CvvImage();  
        virtual ~CvvImage();  
    
        virtual bool Create( int width, int height, int bits_per_pixel, int image_origin = 0 );  
        virtual bool Load( const char* filename, int desired_color = 1 );  
        virtual bool LoadRect( const char* filename,  
    
        int desired_color, CvRect r );  
    
    #if defined WIN32 || defined _WIN32  
        virtual bool LoadRect( const char* filename,int desired_color, RECT r )  
        {  
            return LoadRect( filename, desired_color,  
                cvRect( r.left, r.top, r.right - r.left, r.bottom - r.top ));  
        }  
    #endif  
    
        virtual bool Save( const char* filename );  
        virtual void CopyOf( CvvImage& image, int desired_color = -1 );  
        virtual void CopyOf( IplImage* img, int desired_color = -1 );  
        IplImage* GetImage() { return m_img; };  
        virtual void Destroy(void);  
        int Width() { return !m_img ? 0 : !m_img->roi ? m_img->width : m_img->roi->width; };  
        int Height() { return !m_img ? 0 : !m_img->roi ? m_img->height : m_img->roi->height;};  
        int Bpp() { return m_img ? (m_img->depth & 255)*m_img->nChannels : 0; };  
        virtual void Fill( int color );  
        virtual void Show( const char* window );  
    
    #if defined WIN32 || defined _WIN32  
        virtual void Show( HDC dc, int x, int y, int width, int height,  
            int from_x = 0, int from_y = 0 );  
        virtual void DrawToHDC( HDC hDCDst, RECT* pDstRect );  
        virtual void DrawToHDC( HDC hDCDst, CvRect pDstRect ); 
    #endif  
    
    protected:
    
        IplImage* m_img;
    
    };
    
    typedef CvvImage CImage;
    
    #endif
    

    and CPP file for cvvimage class is following

    ///////////////////////////////////////////////////////////////////////////////////////////////////
    //CvvImage.cpp
    
    #include "StdAfx.h"  
    #include "CvvImage.h"
    ///////////////////////////////////////////////////////////////////////////////////////////////////
    
    CV_INLINE RECT NormalizeRect( RECT r );
    CV_INLINE RECT NormalizeRect( RECT r )
    {
        int t;
        if( r.left > r.right )
        {
            t = r.left;
            r.left = r.right;
            r.right = t;
        }
        if( r.top > r.bottom )
        {
            t = r.top;
            r.top = r.bottom;
            r.bottom = t;
        }
    
        return r;
    }
    CV_INLINE CvRect RectToCvRect( RECT sr );
    CV_INLINE CvRect RectToCvRect( RECT sr )
    {
        sr = NormalizeRect( sr );
        return cvRect( sr.left, sr.top, sr.right - sr.left, sr.bottom - sr.top );
    }
    CV_INLINE RECT CvRectToRect( CvRect sr );
    CV_INLINE RECT CvRectToRect( CvRect sr )
    {
        RECT dr;
        dr.left = sr.x;
        dr.top = sr.y;
        dr.right = sr.x + sr.width;
        dr.bottom = sr.y + sr.height;
    
        return dr;
    }
    CV_INLINE IplROI RectToROI( RECT r );
    CV_INLINE IplROI RectToROI( RECT r )
    {
        IplROI roi;
        r = NormalizeRect( r );
        roi.xOffset = r.left;
        roi.yOffset = r.top;
        roi.width = r.right - r.left;
        roi.height = r.bottom - r.top;
        roi.coi = 0;
    
        return roi;
    }
    void FillBitmapInfo( BITMAPINFO* bmi, int width, int height, int bpp, int origin )
    {
        assert( bmi && width >= 0 && height >= 0 && (bpp == 8 || bpp == 24 || bpp == 32));
    
        BITMAPINFOHEADER* bmih = &(bmi->bmiHeader);
    
        memset( bmih, 0, sizeof(*bmih));
        bmih->biSize = sizeof(BITMAPINFOHEADER);
        bmih->biWidth = width;
        bmih->biHeight = origin ? abs(height) : -abs(height);
        bmih->biPlanes = 1;
        bmih->biBitCount = (unsigned short)bpp;
        bmih->biCompression = BI_RGB;
        if( bpp == 8 )
        {
            RGBQUAD* palette = bmi->bmiColors;
            int i;
            for( i = 0; i < 256; i++ )
            {
                palette[i].rgbBlue = palette[i].rgbGreen = palette[i].rgbRed = (BYTE)i;
                palette[i].rgbReserved = 0;
            }
        }
    }
    CvvImage::CvvImage()
    {
        m_img = 0;
    }
    void CvvImage::Destroy()
    {
        cvReleaseImage( &m_img );
    }
    CvvImage::~CvvImage()
    {
        Destroy();
    }
    bool CvvImage::Create( int w, int h, int bpp, int origin )
    {
        const unsigned max_img_size = 10000;
    
        if( (bpp != 8 && bpp != 24 && bpp != 32) ||
            (unsigned)w >= max_img_size || (unsigned)h >= max_img_size ||
            (origin != IPL_ORIGIN_TL && origin != IPL_ORIGIN_BL))
        {
            assert(0); // most probably, it is a programming error
            return false;
        }
        if( !m_img || Bpp() != bpp || m_img->width != w || m_img->height != h )
        {
            if( m_img && m_img->nSize == sizeof(IplImage))
                Destroy();
    
            m_img = cvCreateImage( cvSize( w, h ), IPL_DEPTH_8U, bpp/8 );
        }
        if( m_img )
            m_img->origin = origin == 0 ? IPL_ORIGIN_TL : IPL_ORIGIN_BL;
        return m_img != 0;
    }
    void CvvImage::CopyOf( CvvImage& image, int desired_color )
    {
        IplImage* img = image.GetImage();
        if( img )
        {
            CopyOf( img, desired_color );
        }
    }
    #define HG_IS_IMAGE(img) \
        ((img) != 0 && ((const IplImage*)(img))->nSize == sizeof(IplImage) && \
        ((IplImage*)img)->imageData != 0)
    void CvvImage::CopyOf( IplImage* img, int desired_color )
    {
        if( HG_IS_IMAGE(img) )
        {
            int color = desired_color;
            CvSize size = cvGetSize( img ); 
            if( color < 0 )
                color = img->nChannels > 1;
            if( Create( size.width, size.height,
                (!color ? 1 : img->nChannels > 1 ? img->nChannels : 3)*8,
                img->origin ))
            {
                cvConvertImage( img, m_img, 0 );
            }
        }
    }
    bool CvvImage::Load( const char* filename, int desired_color )
    {
        IplImage* img = cvLoadImage( filename, desired_color );
        if( !img )
            return false;
    
        CopyOf( img, desired_color );
        cvReleaseImage( &img );
    
        return true;
    }
    bool CvvImage::LoadRect( const char* filename,
                            int desired_color, CvRect r )
    {
        if( r.width < 0 || r.height < 0 ) return false;
    
    
        IplImage* img = cvLoadImage( filename, desired_color );
        if( !img )
            return false;
        if( r.width == 0 || r.height == 0 )
        {
            r.width = img->width;
            r.height = img->height;
            r.x = r.y = 0;
        }
        if( r.x > img->width || r.y > img->height ||
            r.x + r.width < 0 || r.y + r.height < 0 )
        {
            cvReleaseImage( &img );
            return false;
        }
    
        if( r.x < 0 )
        {
            r.width += r.x;
            r.x = 0;
        }
        if( r.y < 0 )
        {
            r.height += r.y;
            r.y = 0;
        }
        if( r.x + r.width > img->width )
            r.width = img->width - r.x;
    
        if( r.y + r.height > img->height )
            r.height = img->height - r.y;
        cvSetImageROI( img, r );
        CopyOf( img, desired_color );
        cvReleaseImage( &img );
        return true;
    }
    bool CvvImage::Save( const char* filename )
    {
        if( !m_img )
            return false;
        cvSaveImage( filename, m_img );
        return true;
    }
    void CvvImage::Show( const char* window )
    {
        if( m_img )
            cvShowImage( window, m_img );
    }
    void CvvImage::Show( HDC dc, int x, int y, int w, int h, int from_x, int from_y )
    {
        if( m_img && m_img->depth == IPL_DEPTH_8U )
        {
            uchar buffer[sizeof(BITMAPINFOHEADER) + 1024];
            BITMAPINFO* bmi = (BITMAPINFO*)buffer;
            int bmp_w = m_img->width, bmp_h = m_img->height;
            FillBitmapInfo( bmi, bmp_w, bmp_h, Bpp(), m_img->origin );
            from_x = MIN( MAX( from_x, 0 ), bmp_w - 1 );
            from_y = MIN( MAX( from_y, 0 ), bmp_h - 1 );
            int sw = MAX( MIN( bmp_w - from_x, w ), 0 );
            int sh = MAX( MIN( bmp_h - from_y, h ), 0 );
            SetDIBitsToDevice(
                dc, x, y, sw, sh, from_x, from_y, from_y, sh,
                m_img->imageData + from_y*m_img->widthStep,
                bmi, DIB_RGB_COLORS );
        }
    }
    void CvvImage::DrawToHDC( HDC hDCDst, RECT* pDstRect ) 
    {
        if( pDstRect && m_img && m_img->depth == IPL_DEPTH_8U && m_img->imageData )
        {
            uchar buffer[sizeof(BITMAPINFOHEADER) + 1024];
            BITMAPINFO* bmi = (BITMAPINFO*)buffer;
            int bmp_w = m_img->width, bmp_h = m_img->height;
            CvRect roi = cvGetImageROI( m_img );
            CvRect dst = RectToCvRect( *pDstRect );
            if( roi.width == dst.width && roi.height == dst.height )
            {
                Show( hDCDst, dst.x, dst.y, dst.width, dst.height, roi.x, roi.y );
                return;
            }
            if( roi.width > dst.width )
            {
                SetStretchBltMode(
                    hDCDst, // handle to device context
                    HALFTONE );
            }
            else
            {
                SetStretchBltMode(
                    hDCDst, // handle to device context
                    COLORONCOLOR );
            }
            FillBitmapInfo( bmi, bmp_w, bmp_h, Bpp(), m_img->origin );
            ::StretchDIBits(hDCDst,dst.x, dst.y, dst.width, dst.height,roi.x, roi.y, roi.width, roi.height,\
                m_img->imageData, bmi, DIB_RGB_COLORS, SRCCOPY );
        }
    }
    void CvvImage::DrawToHDC( HDC hDCDst, CvRect pDstRect )
    {
        RECT rDest=CvRectToRect(pDstRect);
        DrawToHDC(hDCDst,&rDest);
    }
    void CvvImage::Fill( int color )
    {
        cvSet( m_img, cvScalar(color&255,(color>>8)&255,(color>>16)&255,(color>>24)&255) );
    }
    

    enjoy.

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

I am updating an old project that used an old version of cjson to
I used the compiled version of OpenCV for armv7s that can be found here
For the old version xcode/ios, I used: appDelegate =(AppDelegate *)[[UIApplication sharedApplication] delegate]; to access
I have successfully upgraded an MFC application which was compiled with an old version
The old version of express had an option to use sass as the CSS
I'm using an old version of Visual Studio that provides only the 'interactive' method
I'm porting an old version of a software that is partly a linux kernel
I am using some old version of drupal. I would like to change meta
I am using an old version of log4net: 1.2.0.21221. When I used the new
I have an installer that looks for old version, and as part of the

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.