Click here to Skip to main content
15,885,435 members
Articles / Desktop Programming / MFC
Article

BitMap Contour To Windows Region

Rate me:
Please Sign up or sign in to vote.
3.20/5 (12 votes)
16 Sep 2005CPOL 93.4K   1.6K   33   12
An article on how to generate an outline of a bitmap. Used when designing user shaped dialogs.

Sample screenshot

Introduction

The CBitmapHandling class was designed to calculate the contour points in a bitmap. It looks at the bitmap and finds pixel points different from white, it then places these start and stop pixel points in a Vertex of CPoint class. When it has found the outline of the bitmap, it then generates a Windows region. If you use this region in your OnInitDialog and then set the window region using SetWindowRgn(m_WinRgn, TRUE ), your window will then be shaped like the outline.

Using the code

The code consists of a header file and a CPP file.

//
#include "BitMapHandling.h"
using namespace HandlingBitmaps;

BOOL CMyShapedWindowDlg::OnInitDialog()
{
 CDialog::OnInitDialog();
 
 VERIFY( SetWindowPos( NULL, 0, 0, m_nW, 
         m_nH, SWP_NOMOVE | SWP_NOOWNERZORDER ) ); // size and pos. of window
         // cut of areas of region, which you do not really need. 
         // fx. maybe you have bitmap buttons drawn under your bitmap window.
 CBitmapHandling bh;
 bh.BitMapContourToWinRgn(&m_WinRgn, IDB_BITMAP);
 VERIFY( SetWindowRgn(m_WinRgn , TRUE ) );

 return TRUE; // return TRUE unless you set the focus to a control
}
//

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer (Senior) serupIT
Denmark Denmark
(BS.E.E)
I have been working with languages ranging from assembly 68000 to COBOL, OOC, MySQL, Perl, Java 8, JavaScript, C#, C++17, VC++ MFC and WinSockets.

I am currently working as a freelance software developer

Comments and Discussions

 
GeneralDemo Project Pin
gancev18-Apr-07 3:14
gancev18-Apr-07 3:14 
GeneralBitmap Pin
Sangeetha_J25-Jan-07 20:17
Sangeetha_J25-Jan-07 20:17 
Generalembedded systems Pin
jamal odibat18-Sep-05 21:05
jamal odibat18-Sep-05 21:05 
GeneralBetter solution Pin
serup31-Aug-05 2:15
serup31-Aug-05 2:15 
GeneralRe: Better solution Pin
serup31-Aug-05 2:35
serup31-Aug-05 2:35 
GeneralSome Bugs Pin
nebbi27-Jan-04 21:47
nebbi27-Jan-04 21:47 
There are some bugs in this example.
Without trying to run this code i saw some mistakes in the code.

- When you search a startpoint you are testing for white pixels. This looks ok. But when you look for an endpoint you test that R and G and B are not full. This is wrong. Any Colour which has one component at 255 will be taken which is wrong.

- The other thing is that, as you said before, you will not get figures with holes. e.g.(pixels):
xxxx
xxx xxx
xxxx
Also you will not get figures correctly which have more than one up and downs.
xx xx xx
xxxxxxxx
And you will not get figures which have two separatet parts.
xxxx xx
xx x
But to get this all is a really hard work.

GeneralRe: Some Bugs Pin
serup28-Jan-04 20:32
serup28-Jan-04 20:32 
GeneralA guess (or two) at your low mark... Pin
Iain Clarke, Warrior Programmer26-Nov-03 5:10
Iain Clarke, Warrior Programmer26-Nov-03 5:10 
GeneralRe: A guess (or two) at your low mark... Pin
Uwe Keim26-Nov-03 5:25
sitebuilderUwe Keim26-Nov-03 5:25 
GeneralRe: A guess (or two) at your low mark... Pin
Iain Clarke, Warrior Programmer26-Nov-03 5:33
Iain Clarke, Warrior Programmer26-Nov-03 5:33 
GeneralRe: A guess (or two) at your low mark... Pin
serup27-Nov-03 3:38
serup27-Nov-03 3:38 
GeneralRe: A guess (or two) at your low mark... Pin
gordon8824-Jul-08 12:50
professionalgordon8824-Jul-08 12:50 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.