⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bmpi_decoder.c

📁 bmp图像文件解码器的arm版本的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/*

*******************************************************************************
*
* FILE NAME:            
*   bmpi_decoder.c
*
* DESCRIPTION:
*   Source code of all internal functions of the BMP decoder.
*
* MODULE: 
*   BMP (BitMaP) decoder.
* 

*  
*******************************************************************************
*/

/*
*******************************************************************************
* Include files
*******************************************************************************
*/

/* -- Include for BMP ressources -- */ 
#include "bmp_decoder_api.h"
#include "bmpi_decoder.h"


/*
*******************************************************************************
* Macros
*******************************************************************************
*/



/*
*******************************************************************************
* 
* FUNCTION NAME:
*   BMPI_ReadLittleEndianU16()
*
* FUNCTION DESCRIPTION:
*   This function returns an unsigned 16-bit value from input buffer 
*   arranged with little-endian format.
*
* INPUTS:
*   pu8InputBuffer  : input buffer pointer. 
*
* OUTPUTS:
*   None
*   
* RETURN:
*   u16ReturnValue  : unsigned 16-bit returned value
*
* GLOBALS ACCESSED/MODIFIED:
*
* SPECIAL NOTES:
*
*******************************************************************************
*/
OP_UINT16 BMPI_ReadLittleEndianU16
(
    OP_UINT8    *pu8InputBuffer
)
{

    /* -- Declare local variables -- */
    OP_UINT16   u16ReturnedValue;                     /* 16-bit returned value */
    OP_UINT8    u8Temp;                               /* 8-bit temporary variable */

    /* -- Extract 16-bit data from 8-bit buffer -- */
    u8Temp = *pu8InputBuffer++;
    u16ReturnedValue = (OP_UINT16)u8Temp & 0x00ff;
    u8Temp = *pu8InputBuffer;
    u16ReturnedValue = ( ( (OP_UINT16)u8Temp << 8 ) & 0xff00 ) | u16ReturnedValue;

    /* -- Return extracted data -- */
    return(u16ReturnedValue);

}



/*
*******************************************************************************
* 
* FUNCTION NAME:
*   BMPI_ReadLittleEndianU32()
*
* FUNCTION DESCRIPTION:
*   This function returns an unsigned 32-bit value from input buffer 
*   arranged with little-endian format.
*
* INPUTS:
*   pu8InputBuffer  : input buffer pointer. 
*
* OUTPUTS:
*   None
*   
* RETURN:
*   u32ReturnValue  : unsigned 32-bit returned value
*
* GLOBALS ACCESSED/MODIFIED:
*
* SPECIAL NOTES:
*
*******************************************************************************
*/
OP_UINT32 BMPI_ReadLittleEndianU32
(
    OP_UINT8    *pu8InputBuffer
)
{

    /* -- Declare local variables -- */
    OP_UINT8    u8Temp;                               /* 8-bit temporary variable */
    OP_UINT32   u32ReturnedValue;                     /* 32-bit returned value */


    /* -- Extract 32-bit data from 8-bit buffer -- */
    u8Temp = *pu8InputBuffer++;
    u32ReturnedValue = (OP_UINT32)u8Temp & 0x000000ff;
    u8Temp = *pu8InputBuffer++;
    u32ReturnedValue = ( ( (OP_UINT32)u8Temp << 8 ) & 0x0000ff00 ) | u32ReturnedValue;
    u8Temp = *pu8InputBuffer++;
    u32ReturnedValue = ( ( (OP_UINT32)u8Temp << 16 ) & 0x00ff0000 ) | u32ReturnedValue;
    u8Temp = *pu8InputBuffer;
    u32ReturnedValue = ( ( (OP_UINT32)u8Temp << 24 ) & 0xff000000 ) | u32ReturnedValue;

    /* -- Return extracted data -- */
    return(u32ReturnedValue);

}



/*
*******************************************************************************
* 
* FUNCTION NAME:
*   BMPI_ExtractInfoFromFileHeader()
*
* FUNCTION DESCRIPTION:
*   This function extract some information from the file header of a BMP
*   file.
*
* INPUTS:
*   pu8InputBuffer     : input buffer pointer. 
*
* OUTPUTS:
*   psImageInfo        : pointer to image information structure.
*   u32FileSize        : file size returned from header.
*   
* RETURN:
*   None
*
* GLOBALS ACCESSED/MODIFIED:
*
* SPECIAL NOTES:
*
*******************************************************************************
*/
void BMPI_ExtractInfoFromFileHeader
(
    OP_UINT8            *pu8InputBuffer,
    BMP_IMAGE_INFO      *psImageInfo,
    OP_UINT32           *pu32FileSize
)
{

    /* -- Extract image identifier -- */
     psImageInfo->u16ImageType = ((OP_UINT16)*pu8InputBuffer << 8) | *(pu8InputBuffer+1);
     pu8InputBuffer+=2;

     /* -- Extract file size -- */
     *pu32FileSize = BMPI_ReadLittleEndianU32(pu8InputBuffer);
}
 


/*
*******************************************************************************
* 
* FUNCTION NAME:
*   BMPI_ExtractInfoFromInfoHeader()
*
* FUNCTION DESCRIPTION:
*   This function extract some information from the info header of a BMP
*   file.
*
* INPUTS:
*   pu8InputBuffer     : input buffer pointer. 
*
* OUTPUTS:
*   psImageInfo        : pointer to image information structure.
*   
* RETURN:
*   None
*
* GLOBALS ACCESSED/MODIFIED:
*
* SPECIAL NOTES:
*
*******************************************************************************
*/
void BMPI_ExtractInfoFromInfoHeader
(
    OP_UINT8            *pu8InputBuffer,
    BMP_IMAGE_INFO      *psImageInfo
)
{
    /* -- Move pointer to width information -- */ 
    pu8InputBuffer += 18;    

    /* -- Extract image dimensions -- */
    psImageInfo->u32ImageWidth  = BMPI_ReadLittleEndianU32(pu8InputBuffer);
    pu8InputBuffer += 4;
    psImageInfo->u32ImageHeight = BMPI_ReadLittleEndianU32(pu8InputBuffer);
    pu8InputBuffer += 4;

    /* -- Extract number of planes -- */
    psImageInfo->u16NumberOfPlanes = BMPI_ReadLittleEndianU16(pu8InputBuffer);
    pu8InputBuffer += 2;

    /* -- Extract number of bits per pixel -- */
    psImageInfo->u16BitsPerPixel = BMPI_ReadLittleEndianU16(pu8InputBuffer);
    pu8InputBuffer += 2;

    /* -- Extract compression information -- */
    psImageInfo->u32Compression = BMPI_ReadLittleEndianU32(pu8InputBuffer);
    pu8InputBuffer += 4;

    /* -- Extract bitmap data size -- */
    psImageInfo->u32BitmapDataSize = BMPI_ReadLittleEndianU32(pu8InputBuffer);
    pu8InputBuffer += 4;

    /* -- Extract image resolution -- */
    psImageInfo->u32HorizontalResolution = BMPI_ReadLittleEndianU32(pu8InputBuffer);
    pu8InputBuffer += 4;
    psImageInfo->u32VerticalResolution =  BMPI_ReadLittleEndianU32(pu8InputBuffer);
    pu8InputBuffer += 4;

    /* -- Extract number of colors -- */
    psImageInfo->u32NumberOfColors = BMPI_ReadLittleEndianU32(pu8InputBuffer);
    pu8InputBuffer += 4;

    /* -- Extract number of important colors -- */
    psImageInfo->u32ImportantColors = BMPI_ReadLittleEndianU32(pu8InputBuffer);

}

/*
*******************************************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -