Click here to Skip to main content
15,910,981 members
Home / Discussions / C / C++ / MFC
   

C / C++ / MFC

 
GeneralRe: any gdi guru can help me? Pin
OmarLodhi29-Dec-06 4:10
OmarLodhi29-Dec-06 4:10 
AnswerRe: any gdi guru can help me? Pin
Gary R. Wheeler29-Dec-06 6:01
Gary R. Wheeler29-Dec-06 6:01 
AnswerRe: any gdi guru can help me? Pin
Hamid_RT29-Dec-06 17:42
Hamid_RT29-Dec-06 17:42 
GeneralRe: any gdi guru can help me? Pin
OmarLodhi30-Dec-06 4:40
OmarLodhi30-Dec-06 4:40 
AnswerRe: any gdi guru can help me? Pin
Mark Salsbery30-Dec-06 8:38
Mark Salsbery30-Dec-06 8:38 
AnswerRe: any gdi guru can help me? Pin
Mark Salsbery30-Dec-06 10:05
Mark Salsbery30-Dec-06 10:05 
GeneralRe: any gdi guru can help me? Pin
OmarLodhi31-Dec-06 19:07
OmarLodhi31-Dec-06 19:07 
GeneralRe: any gdi guru can help me? [modified] Pin
Mark Salsbery1-Jan-07 11:22
Mark Salsbery1-Jan-07 11:22 
I changed the code a bit so I could test it, but here's a couple examples that hopefully you can
extract some useful parts from (note that I assumed drawing from a window class so I used a
CClientDC).

To convert the DIB to a DDB and draw the DDB:
FILE *file = fopen("C:\\test.bmp", "rb");
fseek(file, SEEK_END, SEEK_END);
long nSize = ftell(file);
 
BYTE *byBmp = new BYTE[nSize];
fseek(file, SEEK_SET, SEEK_SET);
 
//memset(byBmp, 0, nSize);
fread(byBmp,nSize, 1, file);
 
fclose( file );
 
BITMAPFILEHEADER *bmfh = (BITMAPFILEHEADER *)byBmp;
BITMAPINFO *bmi = (BITMAPINFO *)(byBmp + sizeof(BITMAPFILEHEADER));
BITMAPINFOHEADER *bmih = (BITMAPINFOHEADER *)bmi;
 
CClientDC dc(this);
CDC dcMemBkImage;
dcMemBkImage.CreateCompatibleDC(0);
CBitmap m_bmpBackImage;
LONG lScanLines = bmih->biHeight > 0 ? bmih->biHeight : -bmih->biHeight;
int nRet = m_bmpBackImage.CreateCompatibleBitmap(&dc, bmih->biWidth, lScanLines);
 
::SetDIBits(dcMemBkImage, m_bmpBackImage, 0, lScanLines, byBmp + bmfh->bfOffBits, bmi, DIB_RGB_COLORS); 
 
delete [] byBmp;
 
...
 
// Draw the DDB
CClientDC dc(this);
CBitmap *pOldBitmap = dcMemBkImage.SelectObject(&m_bmpBackImage);
BITMAP bitmap;
::GetObject(m_bmpBackImage,sizeof(bitmap),&bitmap);
dc.BitBlt(50, 50, bitmap.bmWidth, bitmap.bmHeight, &dcMemBkImage, 0, 0, SRCCOPY);
dcMemBkImage.SelectObject(pOldBitmap);
dcMemBkImage.DeleteDC();

An alternative is to draw the DIB bits without converting to a DDB:
FILE *file = fopen("C:\\test.bmp", "rb");
fseek(file, SEEK_END, SEEK_END);
long nSize = ftell(file);
 
BYTE *byBmp = new BYTE[nSize];
fseek(file, SEEK_SET, SEEK_SET);
 
//memset(byBmp, 0, nSize);
fread(byBmp,nSize, 1, file);
 
fclose( file );
 
BITMAPFILEHEADER *bmfh = (BITMAPFILEHEADER *)byBmp;
BITMAPINFO *bmi = (BITMAPINFO *)(byBmp + sizeof(BITMAPFILEHEADER));
BITMAPINFOHEADER *bmih = (BITMAPINFOHEADER *)bmi;
 
LONG lScanLines = bmih->biHeight > 0 ? bmih->biHeight : -bmih->biHeight;
 
CClientDC dc(this);
::SetDIBitsToDevice(dc, 50, 50, bmih->biWidth, lScanLines, 0, 0, 0, lScanLines, byBmp + bmfh->bfOffBits, bmi, DIB_RGB_COLORS);
 
delete [] byBmp;



-- modified at 22:07 Monday 1st January, 2007
*EDIT* Fixed code in first example Smile | :)


-- modified at 22:15 Monday 1st January, 2007
GeneralRe: any gdi guru can help me? Pin
OmarLodhi2-Jan-07 14:59
OmarLodhi2-Jan-07 14:59 
NewsHiEdit V1.0.1.4 [modified] Pin
akyprian28-Dec-06 21:33
akyprian28-Dec-06 21:33 
QuestionAnd the question is? Pin
CPallini28-Dec-06 21:43
mveCPallini28-Dec-06 21:43 
AnswerRe: And the question is? Pin
akyprian28-Dec-06 21:50
akyprian28-Dec-06 21:50 
GeneralRe: And the question is? Pin
prasad_som28-Dec-06 22:22
prasad_som28-Dec-06 22:22 
GeneralRe: HiEdit V1.0.1.4 Pin
ThatsAlok28-Dec-06 23:00
ThatsAlok28-Dec-06 23:00 
GeneralRe: HiEdit V1.0.1.4 Pin
akyprian29-Dec-06 0:03
akyprian29-Dec-06 0:03 
GeneralRe: HiEdit V1.0.1.4 Pin
ThatsAlok29-Dec-06 0:46
ThatsAlok29-Dec-06 0:46 
GeneralRe: HiEdit V1.0.1.4 Pin
David Crow29-Dec-06 3:56
David Crow29-Dec-06 3:56 
GeneralRe: HiEdit V1.0.1.4 Pin
akyprian29-Dec-06 4:18
akyprian29-Dec-06 4:18 
GeneralRe: HiEdit V1.0.1.4 Pin
Hamid_RT29-Dec-06 17:32
Hamid_RT29-Dec-06 17:32 
GeneralRe: HiEdit V1.0.1.4 Pin
akyprian30-Dec-06 11:40
akyprian30-Dec-06 11:40 
GeneralRe: HiEdit V1.0.1.4 Pin
Hamid_RT31-Dec-06 3:22
Hamid_RT31-Dec-06 3:22 
GeneralNavigation Error Pin
Shouvik Das28-Dec-06 20:52
Shouvik Das28-Dec-06 20:52 
QuestionVERY URGENT HELP REQUIRED Pin
darkverdict28-Dec-06 20:17
darkverdict28-Dec-06 20:17 
AnswerRe: VERY URGENT HELP REQUIRED Pin
Shouvik Das28-Dec-06 20:47
Shouvik Das28-Dec-06 20:47 
GeneralRe: VERY URGENT HELP REQUIRED Pin
ThatsAlok28-Dec-06 23:14
ThatsAlok28-Dec-06 23:14 

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.