?? bmpi_decoder.c
字號(hào):
/*
*******************************************************************************
*
* 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);
}
/*
*******************************************************************************
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -