J'ai essayé de dessiner sur un bitmap en niveaux de gris 8bpp sans succès. Voici certaines de mes tentatives. Peut-être que quelqu'un peut signaler ce que je fais mal.Dessin sur bitmap en niveaux de gris 8bpp (C++ non géré)
============================================== =====
Tentative 1: Créer, sélectionnez et dessiner:
dans le constructeur:
CBitmap bm;
bm.CreateBitmap (200, 200, 1, 8, NULL);
En OnDraw:
CDC *mdc=new CDC();
HGDIOBJ tmp = mdc->SelectObject(bm);
Résultat: tmp est NULL, ce qui indique échec.
============================================== =====
Tentative 2: CreateDIBSection
dans le constructeur:
HBITMAP hbm;
BITMAPINFOHEADER bih;
BITMAPINFO bi;
HANDLE hb;
CDC* myDc = new CDC();
HDC hdc = myDc->GetSafeHdc();
void* bits;
RGBQUAD rq [256];
initBi();
hbm = CreateDIBSection (hdc, &bi, DIB_RGB_COLORS, &bits, NULL, 0);
...
void CEightBitDrawingView::initBi()
{
bih.biSize = sizeof (BITMAPINFOHEADER);
bih.biWidth = 200;
bih.biHeight = -200;
bih.biPlanes = 1;
bih.biBitCount = 8;
bih.biCompression = BI_RGB;
bih.biSizeImage = 0;
bih.biXPelsPerMeter = 14173;
bih.biYPelsPerMeter = 14173;
bih.biClrUsed = 0;
bih.biClrImportant = 0;
memset ((void *) rq, 0, 256 * sizeof (RGBQUAD));
bi.bmiHeader = bih;
bi.bmiColors = rq;
}
Résultat: Cela ne compile même pas parce que le membre BITMAPINFO bmiColors est défini comme: RGBQUAD bmiColors [1] ;
n'acceptera donc pas plus d'une couleur RVB. En fait, rien que j'assigne à ce membre ne se compile! (Pourraient-ils éventuellement le rendre plus complexe!?)
Toutes les suggestions seraient appréciées! Merci!
============================================== =====
Avez-vous essayé GDI +? Ou est-ce que toute entreprise n'a pas besoin de le faire? –
Je convertis mon exemple de travail en GDI + en C++/GDI non géré pour la vitesse. Il s'avère extrêmement difficile d'obtenir un bitmap 8bpp à utiliser dans GDI. – user20493
GDI + n'est pas géré. C'est une bibliothèque C++ construite sur win32. Géré serait WinForms ou WPF. – Cogwheel