Windows上的C ++中的位图操作

我有自己的一个位图,在Windows上的C + +处理:

HBITMAP hBitmap; 

在这个图像上,我想做一些图像识别,模式分析,这样的事情。 在我的大学学习中,我已经在Matlab中完成了这个任务,根据他们的位置很容易获得单个像素,但我不知道如何在Windows下使用C ++来完成这个任务 – 我还没有真正能够了解到目前为止我所阅读的内容。 我已经看到了一些很好看的Bitmap类的引用,可以让你setPixel()和getPixel()等类似的东西,但我认为这是与.net。

我应该如何将我的HBITMAP变成我可以轻松玩的东西? 我需要能够得到RGBA的信息。 有没有图书馆可以让我处理数据,而不必了解DC和BitBlt等等?

您可以使用OpenCV库作为完整的图像处理工具。

您也可以使用MFC的CImage或VCL的TBitmap来提取HBITMAP像素值。

 Gdiplus::Bitmap* pBitmap = Gdiplus::Bitmap::FromHBITMAP( hBitmap, NULL ); Gdiplus::Color pixel_color; pBitmap->GetPixel( x, y, &pixel_color ); // read pixel at x,y into pixel_color // ... delete pBitmap; // do not forget to delete 

附:

 DIBSECTION ds; ::GetObject(hbmp/*your HBITMAP*/, sizeof DIBSECTION, &ds); 

您将在ds.dsBm中获得所有您需要的(包括像素格式和像素缓冲区地址)。 看文档

试试这个使用GDI的GetPixel

 COLORREF GetBitmapBixel(HBITMAP hBitmap, int xPos, int yPos) { HDC hDC = GetDC(NULL); HDC hMemDC = CreateCompatibleDC(hDC); COLORREF pixelColor; HBITMAP hOld = (HBITMAP)SelectObject(hMemDC, hBitmap); pixelColor = ::GetPixel(hMemDC, xPos, yPos); SelectObject(hMemDC, hOld); DeleteDC(hMemDC); ReleaseDC(NULL, hDC); return pixelColor; }