Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Bitmap bei verschiedenen Farbtiefen anzeigen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
19.01.2005, 13:38 Uhr
~hans_der_gruene
Gast


Hallo!

Ich habe ein Programm, mit dem ich Bild aus einem Bildsensor auslese und in ein INT32 Array ablege. Nun will ich das Bild in einem Dialogfeld anzeigen. Das funktioniert auch, wenn die Farbtiefe des Bildschirms auf 32bit eingestellt ist. Wie kann ich das Bild anzeigen, wenn die Frabtiefe nur 16bit ist, ohne das Bild vorher zu speichern.

So habe ich mir das gedacht:

CBitmap pic;
BITMAP test;

test.bmBits= m_bild.field;//in m_bild.field stehen die Pixel
test.bmBitsPixel= 32;
test.bmHeight= 1024;
test.bmPlanes= 1;
test.bmType= 0;
test.bmWidth= 1280;
test.bmWidthBytes= 5120;

pic.CreateBitmapIndirect(&test);

CWnd* wp = this;
CDC *pDC = wp->GetDC();
CDC imageDC;
imageDC.CreateCompatibleDC(pDC);
imageDC.SelectObject( &pic);

pDC->BitBlt(0, 0, 1280, 1024, &imageDC, 0, 0, SRCCOPY);

imageDC.DeleteDC();
wp->ReleaseDC(pDC);


Ich hoffe es weiß jemand einen Rat.
Vielen Dank
Hans
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.01.2005, 13:45 Uhr
Tommix



Hallo,
StretchDIBits (API) macht das, Du mußt nur einen passenden BITMAPINFOHEADER erzeugen.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
20.01.2005, 11:33 Uhr
~hans_der_gruene
Gast


Hallo!

Klappt mit StretchDIBits fast perfekt. Vielen Dank für die schnelle Antwort!
Wenn ich jedoch das Bild verkleinere, dann gibt es bei 32bit Farbtiefe ein anderes Bild als bei 16bit. Bei 16bit schaut es so aus, als wäre das Bild mit 256 Farben dargestellt, bei 32 bit sieht es normal aus. Mein BITMAPINFOHEADER sieht so aus:

bitmap_info.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bitmap_info.bmiHeader.biWidth = 1280;
bitmap_info.bmiHeader.biHeight = 1024;
bitmap_info.bmiHeader.biPlanes = 1;
bitmap_info.bmiHeader.biBitCount = 32;
bitmap_info.bmiHeader.biCompression = BI_RGB;
bitmap_info.bmiHeader.biSizeImage = 0;
bitmap_info.bmiHeader.biXPelsPerMeter = 0;
bitmap_info.bmiHeader.biYPelsPerMeter = 0;
bitmap_info.bmiHeader.biClrUsed = 0;
bitmap_info.bmiHeader.biClrImportant = 0;

Gruß
Hans
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
20.01.2005, 13:02 Uhr
Tommix



Hallo,
da weiß ich jetzt auch nichts. Evtl. Kann man mit SetStretchBltMode etwas machen.

Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
20.01.2005, 15:25 Uhr
~hans_der_gruene
Gast


Hallo!

SetStretchBltMode(Device, HALFTONE);

hat es gebracht. Warum das für die Verkleinerung nötig ist, für das Vergrößern aber nicht ist mir ein Rätsel.

Gruß
Hans
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: