[Webinar] Streamline your web hosting managementRegister Today

x
?
Solved

CImage ReleaseDC Exception Mystery

Posted on 2008-10-22
1
Medium Priority
?
1,500 Views
Last Modified: 2013-12-14
I have been applying the CImage class within a Visual C++/MFC DLL.  I am experiencing a mysterious exception in atlimage.h line 1217 when I call CImage::GetPixel(0,0).  The offending statement is:

hBitmap = HBITMAP( ::SelectObject( m_hDC, m_hOldBitmap ) );
ATLASSERT( hBitmap == m_hBitmap );

I have successfully loaded an 8x13 jpg 24 bpp image from disk and the pixel value is successfully read, yet the m_hOldBitmap member is null and thus SelectObject returns null.  The m_hBitmap member is valid and thus does not match hBitmap.

Has anyone experienced this error and found a solution?

Thanks!
0
Comment
Question by:fredsmullin
1 Comment
 

Accepted Solution

by:
fredsmullin earned 0 total points
ID: 22783196
Please disregard the question.  I found that it was operator error with CImage use.

If you use the CImage assignment operator, CImage a = CImage b, it merely copies the HBITMAP value from b to a.  But when b is destroyed, it destroys the HBITMAP as well.  But, a has no idea this has occurred and any subsequent operations will result in exceptions being generated.

The proper way to assign from one CImage to another is to use CImage::Attach and CImage::Detach functions.  This only moves the HBITMAP from one class to the next, but prevents it from being shared between two classes.
0

Featured Post

The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction: Displaying information on the statusbar.   Continuing from the third article about sudoku.   Open the project in visual studio. Status bar – let’s display the timestamp there.  We need to get the timestamp from the document s…
Ready to get certified? Check out some courses that help you prepare for third-party exams.
The viewer will learn how to use NetBeans IDE 8.0 for Windows to connect to a MySQL database. Open Services Panel: Create a new connection using New Connection Wizard: Create a test database called eetutorial: Create a new test tabel called ee…
The viewer will learn how to use and create keystrokes in Netbeans IDE 8.0 for Windows.

607 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question