如何用libbmp读取光栅?

问题描述 投票:0回答:3

昨天我下载了这个库: http://code.google.com/p/libbmp/ 他们说这个 C 库是为轻松读取、写入和修改 Windows 位图 (BMP) 图像文件而设计的。但我找不到任何读取位图的函数。有人知道如何在 C 中读取位图(图像中的 RGB 像素)吗?我使用 CodeBlocks IDE。

c bitmap
3个回答
0
投票

我在该代码中没有看到任何读取(加载)功能,因此描述有点可疑。

我查看了代码,没有调用

open()
使用读取模式,并且函数
bmp_create()
不支持加载现有文件。

图书馆似乎不完整。

你可以看看其他库,也许是EasyBMP(它看起来很旧,但另一方面BMP格式也是如此)。


0
投票

以下函数读取 BMP:

char *DIBreadBmp (char *szFilename)
{
    BITMAPFILEHEADER    *pBmf;
    DWORD               dwBitsSize;
    char                *pDIB;
    int                 fd;

    if ((_sopen_s (&fd, szFilename,(_O_RDONLY|_O_BINARY), _SH_DENYWR,(_S_IREAD|_S_IWRITE))) != 0) {
        LogError (ERR_FILENOTFOUND, szFilename);
        return (0);
    }
    // get length of DIB in bytes for use when reading
    dwBitsSize = _filelength (fd);

    // Go read the DIB file header and check if it's valid.
    pBmf = malloc (sizeof(BITMAPFILEHEADER));

    if ((_read (fd, (LPSTR) pBmf, sizeof (BITMAPFILEHEADER)) != sizeof (BITMAPFILEHEADER))
    ||  (pBmf->bfType != DIB_HEADER_MARKER))
    {
        free(pBmf);
        _close (fd);
        LogError (ERR_NOT_DIB, szFilename);
        return (0);
    }
    // Allocate memory for DIB
    if (!(pDIB= malloc(dwBitsSize - sizeof(BITMAPFILEHEADER))))
    {
        free(pBmf);
        _close (fd);
        LogError (ERR_MEMORY, szFilename);
        return (0);
    }
    // Go read the bits.
    if (!_read (fd, pDIB, dwBitsSize - sizeof(BITMAPFILEHEADER)))
    {
        free(pDIB);
        free(pBmf);
        _close (fd);
        LogError (ERR_READ, szFilename);
        return (0);
    }
    _close (fd);
    free(pBmf);

    return (pDIB);
}

0
投票

在寻找如何从位图中解压像素时遇到这个线程。据说左下角是左上像素,要么是最重要的,要么是最不重要的,并且双字对齐的空填充令人困惑。 这可能会有所帮助: https://github.com/rtpkgs/libbmpread

© www.soinside.com 2019 - 2024. All rights reserved.