简体   繁体   English

如何从uchar缓冲区读取1位bmp到cv :: Mat

[英]How to read 1-bit bmp from uchar buffer to cv::Mat

Here is a code, for reading bmp files and convert it to ImplImage class. 这是一个代码,用于读取bmp文件并将其转换为ImplImage类。 And I know that there is simple way (ImplImage("filepath")). 而且我知道有一种简单的方法(ImplImage(“ 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);

How could I read 1-bit bmp image? 如何读取1位bmp图像? It works fine with 24-bit and 8-bit. 它适用于24位和8位。 Help please:) 请帮助:)

Open the bitmap file with LR_CREATEDIBSECTION flag 使用LR_CREATEDIBSECTION标志打开位图文件

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 will give access to bits. bm.bmBits将提供对位的访问。 The size of bits is bm.bmWidthBytes x bm.bmHeight 位的大小是bm.bmWidthBytes x bm.bmHeight

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM