这是我的尝试(丑陋的 GDI+ 和 GDI 混合使用...)
// ...
BYTE pixels[BMP_WIDTH * BMP_HEIGHT * BMP_BPP];
HBITMAP hBitmap;
Gdiplus::Bitmap cBitmap(BMP_WIDTH, BMP_HEIGHT, PixelFormat32bppRGB);
Gdiplus::Graphics cGraphics(&cBitmap);
Gdiplus::Pen cPen(Gdiplus::Color(255, 255, 0, 0));
cGraphics.DrawRectangle(&cPen, 0, 0, cBitmap.GetWidth() - 1, cBitmap.GetHeight() - 1);
// and here it get's real ugly, I'd like to change that...
cBitmap.GetHBITMAP(Gdiplus::Color(255, 255, 255), &hBitmap);
GetBitmapBits(hBitmap, sizeof(pixels), pixels);
// ...
有人告诉我要使用LockBits,但我真的不太懂。我尝试了一下,但失败了,所以我不会发布那个尝试的版本。
bitmapData.Stride
与bitmapData.Width * sizeof(bitmapData.PixelFormat)
不同,因为它还包含未使用的数据。这需要使用for循环来丢弃未使用的数据。 - malatmemcpy(...)
处崩溃。 - Gray Programmerz