如何读取从UChar缓冲区到CV :: MAT的1位BMP



这是一个代码,用于读取BMP文件并将其转换为"杀死类"。而且我知道有简单的方法(固化(" filepath"((。

 CFile File;
char *ReadBuffer; // Pointer to read buffer
char *OutputBuffer; // Pointer to output buffer
BITMAPFILEHEADER BmpFileHeader;
unsigned int BmpHeadSize;
char *BmpHeadPtr;
File.Open(FileName);
SrcFile.Read(&BmpFileHeader, sizeof(BmpFileHeader);
BmpHeadSize = BmpFileHeader.bfOffBits - sizeof(BmpFileHeader);
BmpHeadPtr = new char[BmpHeadSize];
File.Read(BmpHeadPtr, BmpHeadSize);
BmpInfoPtr = (BITMAPINFOHEADER*)BmpHeadPtr;
ReadBuffer = new char[BmpInfoPtr->biSizeImage];
SrcFile.Read(ReadBuffer, BmpInfoPtr->biSizeImage);
OutputBuffer = new char[BmpInfoPtr->biSizeImage];
for (i = 0; i < IMAGE_HEIGHT; i++)
{
    //Use this line if the bitmap is 24 bit
        memcpy(&OutputBuffer[(IMAGE_HEIGHT - i - 1) * IMAGE_WIDTH * 3],
            &ReadBuffer[i * IMAGE_WIDTH * 3], IMAGE_WIDTH * 3);
}
memcpy(m_Ipl->imageData, OutputBuffer, BmpInfoPtr->biSizeImage);

如何阅读1位BMP图像?它可以与24位和8位一起工作。请帮助:(

LR_CREATEDIBSECTION flag

打开位图文件
HBITMAP hbmp = (HBITMAP)LoadImageW(0, L"test.bmp", IMAGE_BITMAP, 0, 0,
    LR_LOADFROMFILE | LR_CREATEDIBSECTION);
BITMAP bm;
GetObject(hbmp, sizeof(bm), &bm);

bm.bmBits将访问位。位的大小为 bm.bmWidthBytes x bm.bmHeight

最新更新