Toon posts:

Bitmap in een dialog VC++

Pagina: 1
Acties:

Verwijderd

Topicstarter
ik gebruik momenteel de volgende code om een monochrome bitmap te tonen in een CStatic

BYTE bits [] = {0x51, 0x77, 0x10, 0x00,
0x57, 0x77, 0x50, 0x00,
0x13, 0x77, 0x50, 0x00,
0x57, 0x77, 0x50, 0x00,
0x51, 0x11, 0x10, 0x00 };

hBmp = CreateBitmap (20, 5, 1, 1, bits);
m_picture->SetBitmap(hBmp);
-------------------------------------
Dit werkt ook prachtig maar ik heb echter een probleem zodra ik 24 bit data wil tonen dan krijg ik alleen een leeg venstertje te zien. in mijn geval ziet de code als volgt uit :

hBmp = CreateBitmap (576,432, 1, 24, image_buffer);
m_picture->SetBitmap(hBmp);

hierbij bevat image_buffer een gedecodeerde JPG,PNG of een BMP plaatje.
Kan iemand mij hierbij helpen. De data in image buffer is 100% in orde, deze schrijf ik namelijk na decodering naar een AVI file weg.

Het zal vast iets simpels zijn maar ik ben me er een beetje blind op aan het staren en zie niks raars staan..

Al Met Al Help nodig _/-\o_ _/-\o_ _/-\o_

[Edit] Post gewijzigd... verkeerde code copy paste :) [\Edit]

[ Voor 27% gewijzigd door Verwijderd op 15-04-2003 10:17 ]


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Check eens voor errors

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Compiling...
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
cl /MDd /W3 /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_AFXDLL" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c
"H:\My Documents\cpp\v0.13\jpg2aviDlg.cpp"
jpg2aviDlg.cpp
Linking...

jpg2avi.exe - 0 error(s), 0 warning(s)

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Nee, errors van de functies die je aanroept natuurlijk

P&W FAQ - Leer **** debuggen!!

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Ik heb de zoi al diverse malen door de debugger heen gestepped... mijn CreateBitmap retouneer me mooi een handle naar mijn graphics (NULL als het verkeerd is) en mijn SetBitmap retouneert ook dat wat hij moet doen

Maar toch bedankt voor de hulpvolle tips.

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Probeer die bitmap anders eens te creeeren met CreateCompatibleBitmap, en dan vervolgens de bits zetten met SetDIBits
The CreateBitmap function can be used to create color bitmaps. However, for performance reasons applications should use CreateBitmap to create monochrome bitmaps and CreateCompatibleBitmap to create color bitmaps. Whenever a color bitmap returned from CreateBitmap is selected into a device context, the system checks that the bitmap matches the format of the device context it is being selected into. Because CreateCompatibleBitmap takes a device context, it returns a bitmap that has the same format as the specified device context. Thus, subsequent calls to SelectObject are faster with a color bitmap from CreateCompatibleBitmap than with a color bitmap returned from CreateBitmap.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Tja ja mensen ik heb het na 2 dagen ergeren.. stress. en nog meer gezeik toch voor elkaar...

HDC dc= CreateCompatibleDC(NULL);
BITMAPINFO i;
ZeroMemory( &i.bmiHeader, sizeof(BITMAPINFOHEADER) );
i.bmiHeader.biWidth=bihNew->biWidth;
i.bmiHeader.biHeight=bihNew->biHeight;
i.bmiHeader.biPlanes=1;
i.bmiHeader.biBitCount=24;
i.bmiHeader.biSizeImage=0;
i.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
i.bmiHeader.biClrUsed= 0;
i.bmiHeader.biClrImportant= 0;

unsigned char * pvBits;

HBITMAP hbmp= CreateDIBSection( dc,&i,DIB_RGB_COLORS,(void **)&pvBits,NULL,0);

for (long counter=0;counter<bihNew->biHeight*bihNew->biWidth*3;counter++)
pvBits[counter] = image_buffer[counter];
m_picture->SetBitmap(hbmp);

Naja zo kan je dus RGB data naar een CStatic wegschrijven.

  • EfBe
  • Registratie: Januari 2000
  • Niet online
Mja, ik laad een bitmap uit een resource met LoadBitmap(), dan doe ik dit:

C++:
1
2
3
4
5
6
m_ghAppLogoBitmapHandle=LoadBitmap(m_gpDemoDat->GethInstance(),MAKEINTRESOURCE(IDB_APPLOGO));
// Get handle of App Logo picture holder
hAppLogo=GetDlgItem(hWnd,IDC_APPLOGO);

// set in dialogitem 
SendMessage(hAppLogo,STM_SETIMAGE,IMAGE_BITMAP,(LPARAM)m_ghAppLogoBitmapHandle);


et voila!
m_ghAppLogoBitmapHandle is van het type HBITMAP.
IDC_APPLOGO is een picture control, win32. Berehandig :) Wellicht een idee?

[ Voor 3% gewijzigd door EfBe op 15-04-2003 18:47 ]

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com


Verwijderd

Topicstarter
Tja een resource was het probleem ook niet dat was zo gebeurt. Mijn probleem is echter dat ik een preview scherm maak aan de hand van een BMP, JPG of PNG die ik eerst naar RGB decodeer.

Naja ik ben blij dat het alweeer werkt.. dit proggie van mij begaf het namelijk 3 uur voor een presentatie ... dus dat was wel flink balen..

  • EfBe
  • Registratie: Januari 2000
  • Niet online
LoadBitmap geeft een handle naar een Bitmap struct terug, je had dus in je eigen code zo'n struct moeten vullen (dus middels pointers naar je al gevulde buffer) en dan met sendmessage die kunnen tonen op je scherm, zonder die per pixel writes. Maar goed, achterafgeblaat :P

Creator of: LLBLGen Pro | Camera mods for games
Photography portfolio: https://fransbouma.com

Pagina: 1