- Visual C++源码
- Visual Basic源码
- C++ Builder源码
- Java源码
- Delphi源码
- C/C++源码
- PHP源码
- Perl源码
- Python源码
- Asm源码
- Pascal源码
- Borland C++源码
- Others源码
- SQL源码
- VBScript源码
- JavaScript源码
- ASP/ASPX源码
- C#源码
- Flash/ActionScript源码
- matlab源码
- PowerBuilder源码
- LabView源码
- Flex源码
- MathCAD源码
- VBA源码
- IDL源码
- Lisp/Scheme源码
- VHDL源码
- Objective-C源码
- Fortran源码
- tcl/tk源码
- QT源码
Bmp.c
资源名称:SDK_M5661.rar [点击查看]
上传用户:hjhsjcl
上传日期:2020-09-25
资源大小:11378k
文件大小:19k
源码类别:
压缩解压
开发平台:
C++ Builder
- /*==========================================================================
- Copyright (c) 2004 ALi Corporation. All Rights Reserved
- File: Bmp.c
- content:
- History: Created by Walace 2005/06/29
- ==========================================================================*/
- #define _BMP_H_
- #include <DP8051XP.H>
- #include "TypeDef.h"
- #include "Const.h"
- #include "Reg5661.h"
- #include "Common.h"
- #include "OledString.h"
- #include "Key.h"
- #include "Idma.h"
- #include "FileSystem.h"
- #include "OLED.h"
- #include "IconDefine.h"
- #if(PHOTO_SUPPORT_BMP||PHOTO_BMP_DSP_DECODE) //Walace061018#2 bmp dsp decode
- #include "Bmp.h"
- #include "UiPhoView.h"
- #include "VideoDsp.h" //Walace060313#1
- #include "UiCommon.h"
- #define BMP_HEAD_IDENTIFIER 0x00
- #define BMP_HEAD_FILE_SIZE 0x02
- #define BMP_HEAD_DATA_OFFSET 0x0A
- #define BMP_HEAD_HEAD_SIZE 0x0E
- #define BMP_HEAD_WIDTH 0x12
- #define BMP_HEAD_HEIGHT 0x16
- #define BMP_HEAD_PLANES 0x1A
- #define BMP_HEAD_PIXEL_BITS 0x1C
- #define BMP_HEAD_COMP_TYPE 0x1E
- #define BMP_HEAD_BMP_SIZE 0x22
- #define BMP_HEAD_HRESOLUTION 0x26
- #define BMP_HEAD_VRESOLUTION 0x2A
- #define BMP_HEAD_COLOR_USED 0x2E
- #define BMP_HEAD_COLOR_IMP 0x32
- #define BMP_HEAD_PALETTE 0x36
- // Constants for the biCompression field...
- #define BMP_COMP_RGB 0 /* No compression - straight BGR data */
- #define BMP_COMP_RLE8 1 /* 8-bit run-length compression */
- #define BMP_COMP_RLE4 2 /* 4-bit run-length compression */
- #define BMP_COMP_BITFIELDS 3 /* RGB bitmap with RGB masks */
- #define IMG_PRC_ERR 0x00
- #define IMG_PRC_NOP 0x00
- #define IMG_PRC_SUCCESS 0x01
- #define IMG_PRC_COMPLETE 0x02
- #define SECTOR_SIZE 512
- #define FS_UNOPENED 0xFFFFFFFF
- typedef struct
- {
- DWORD dwRMask;
- DWORD dwGMask;
- DWORD dwBMask;
- BYTE bBOffset;
- BYTE bBLen;
- BYTE bGOffset;
- BYTE bGLen;
- BYTE bROffset;
- BYTE bRLen;
- }RGBMASK;
- #define BMP_COLOR_PATLETTE 0x00
- #define BMP_COLOR_MASK 0x01
- #define BMP_DIR_BOTTOM_TOP 0x00
- #define BMP_DIR_TOP_BOTTOM 0x01
- typedef struct /**** BMP file info structure ****/
- {
- DWORD dwDataOffset;
- WORD wBitPerPixel;
- DWORD dwColorUsed;
- BYTE bDataMask;
- DWORD dwCompType;
- BYTE bColorMode;
- BYTE bStoreDir;
- }BMPHEADERINFO;
- #endif
- #if(PHOTO_SUPPORT_BMP) //Walace061018#2 bmp dsp decode
- //3==== gxbBmpProcState ============
- #define BMP_PRC_IDLE 0x00
- #define BMP_PRC_INITIAL 0x01
- #define BMP_PRC_SHOW 0x04
- #define BMP_PRC_ERR 0x05
- #define BMP_PRC_END 0x06
- BMPHEADERINFO xdata stBmpHead;
- xdata RGBMASK* pMask; //Walace061208#1
- xdata PWORD gpwPalette; //Walace061208#1
- XBYTE gxbBmpProcState = BMP_PRC_IDLE;
- //Walace051214#FullScreen Remove
- //XDWORD gxdwFsByteIndex;
- //XWORD gxwLineIndex;
- #endif
- #if(PHOTO_SUPPORT_BMP|PHOTO_BMP_DSP_DECODE) //Walace061018#2 bmp dsp decode
- void ReverseHLSB(PBYTE pbData,BYTE bDataSize)
- {
- BYTE bBuff,bIndex;
- for(bIndex=0;bIndex<bDataSize/2;bIndex++)
- {
- bBuff=*(pbData+bIndex);
- *(pbData+bIndex)=*(pbData+(bDataSize-bIndex-1));
- *(pbData+(bDataSize-bIndex-1))=bBuff;
- }
- }
- BOOL GetFsData(PBYTE pbTarget,DWORD dwFsByteIndex,PWORD pwDataLen) large //Walace061211#3
- {
- WORD wGetLen;
- WORD wIndex;
- WORD wByteIndex;
- WORD wDataLen;
- DWORD dwTagFileSector;
- wDataLen = *pwDataLen;
- *pwDataLen=0;
- while(wDataLen)
- {
- wByteIndex = dwFsByteIndex%SECTOR_SIZE;
- dwTagFileSector= dwFsByteIndex/SECTOR_SIZE;
- if(dwTagFileSector!=gdwFileSector) //different to current sector
- {
- GPIOA_ON(5);
- if(FsReadFileSectorNew(dwTagFileSector,FS_DATA_0_0))
- gdwFileSector=dwTagFileSector;
- else
- return FALSE;
- GPIOA_OFF(5);
- }
- if(wDataLen>(SECTOR_SIZE-wByteIndex))
- wGetLen=SECTOR_SIZE-wByteIndex;
- else
- wGetLen=wDataLen;
- if(pbTarget!=NULL)
- {
- for(wIndex=0;wIndex<wGetLen;wIndex++)
- {
- *pbTarget = *(gxbFsData+gxwOffsetDataSec+wIndex+wByteIndex);
- pbTarget++;
- }
- }
- dwFsByteIndex+=wGetLen;
- (*pwDataLen)+=wGetLen;
- wDataLen -=wGetLen;
- }
- return TRUE;
- }
- #endif
- #if(PHOTO_SUPPORT_BMP) //Walace061018#2 bmp dsp decode
- void GetSetBitOffset(DWORD dwData,PBYTE pbOffset,PBYTE pbLen)
- {
- *pbOffset=0;
- *pbLen=0;
- while(!((dwData>>(*pbOffset))&0x01))
- (*pbOffset)++;
- while((dwData>>((*pbLen)+(*pbOffset)))&0x01)
- (*pbLen)++;
- }
- void GetPaletteForOled(void) large //Walace060614#3 use large
- {
- BYTE dwColor[4];
- WORD wLen;
- WORD wIndex;
- WORD wColorUsed;
- if(stBmpHead.dwColorUsed!=0x0000)
- wColorUsed = stBmpHead.dwColorUsed;
- else
- wColorUsed = 1<<(stBmpHead.wBitPerPixel);
- wLen=4;
- for(wIndex=0;wIndex<wColorUsed;wIndex++)
- {
- GetFsData((PBYTE)dwColor,BMP_HEAD_PALETTE+wIndex*4,&wLen);
- *(gpwPalette+wIndex)=0x0000; // OLED 2 bytes per pixel RGB = (5 6 5)
- *(gpwPalette+wIndex)|=(((WORD)dwColor[0])>>3)<<OLED_B_OFFSET; // Bo = (B*2^5)/(2^8) << 11
- *(gpwPalette+wIndex)|=(((WORD)dwColor[1])>>2)<<OLED_G_OFFSET; // Go = (G*2^6)/(2^8) << 5
- *(gpwPalette+wIndex)|=(((WORD)dwColor[2])>>3)<<OLED_R_OFFSET; // Ro = (R*2^5)/(2^8) << 0
- }
- }
- void GetRGBMask(RGBMASK* pMask) large
- {
- WORD wLen;
- if(stBmpHead.dwCompType==BMP_COMP_RGB)
- {
- switch(stBmpHead.wBitPerPixel)
- {
- case 16:
- pMask->dwRMask = 0x007C0000;
- pMask->dwGMask = 0xE0030000;
- pMask->dwBMask = 0x1F000000;
- break;
- case 24:
- case 32:
- pMask->dwRMask = 0x0000FF00;
- pMask->dwGMask = 0x00FF0000;
- pMask->dwBMask = 0xFF000000;
- break;
- }
- }
- else // bit field
- {
- wLen=12; // RGB = 12 byte ( 3*sizeof(DWORD) )
- GetFsData((PBYTE)pMask,BMP_HEAD_PALETTE,&wLen);
- }
- ReverseHLSB((PBYTE)(&(pMask->dwRMask)),stBmpHead.wBitPerPixel/8);
- ReverseHLSB((PBYTE)(&(pMask->dwGMask)),stBmpHead.wBitPerPixel/8);
- ReverseHLSB((PBYTE)(&(pMask->dwBMask)),stBmpHead.wBitPerPixel/8);
- pMask->dwRMask = pMask->dwRMask>>(32-stBmpHead.wBitPerPixel);
- pMask->dwGMask = pMask->dwGMask>>(32-stBmpHead.wBitPerPixel);
- pMask->dwBMask = pMask->dwBMask>>(32-stBmpHead.wBitPerPixel);
- GetSetBitOffset(pMask->dwRMask,&(pMask->bROffset),&(pMask->bRLen));
- GetSetBitOffset(pMask->dwGMask,&(pMask->bGOffset),&(pMask->bGLen));
- GetSetBitOffset(pMask->dwBMask,&(pMask->bBOffset),&(pMask->bBLen));
- }
- BOOL GetBmpConfig(void) //Walace060817#2
- {
- DWORD dwBuff=0;
- INT iBuff;
- WORD wLen;
- wLen=2;
- GetFsData((PBYTE)&dwBuff,BMP_HEAD_IDENTIFIER,&wLen);
- if(dwBuff!=0x424D0000) // 'BM'=0x4d42
- {
- gxbErrCode = ERR_PE_UNSUPPORT_FORMAT; //Walace060817#2
- return FALSE; // only support microsoft type
- }
- wLen=4;
- GetFsData((PBYTE)&(stBmpHead.dwDataOffset),BMP_HEAD_DATA_OFFSET,&wLen);
- ReverseHLSB((PBYTE)(&(stBmpHead.dwDataOffset)),4);
- GetFsData((PBYTE)&dwBuff,BMP_HEAD_WIDTH,&wLen);
- ReverseHLSB((PBYTE)&dwBuff,4);
- gxwPhoWidth=(WORD)dwBuff;
- GetFsData((PBYTE)&dwBuff,BMP_HEAD_HEIGHT,&wLen);
- ReverseHLSB((PBYTE)&dwBuff,4);
- iBuff=(INT)dwBuff;
- if(iBuff<0)
- { stBmpHead.bStoreDir = BMP_DIR_TOP_BOTTOM;
- gxwPhoHeight = (WORD)(-iBuff);
- }
- else
- { stBmpHead.bStoreDir = BMP_DIR_BOTTOM_TOP;
- gxwPhoHeight = (WORD)iBuff;
- }
- GetFsData((PBYTE)&(stBmpHead.dwColorUsed),BMP_HEAD_COLOR_USED,&wLen);
- ReverseHLSB((PBYTE)(&(stBmpHead.dwColorUsed)),4);
- GetFsData((PBYTE)&(stBmpHead.dwCompType),BMP_HEAD_COMP_TYPE,&wLen);
- ReverseHLSB((PBYTE)(&(stBmpHead.dwCompType)),4);
- wLen=2;
- GetFsData((PBYTE)&(stBmpHead.wBitPerPixel),BMP_HEAD_PIXEL_BITS,&wLen);
- ReverseHLSB((PBYTE)(&(stBmpHead.wBitPerPixel)),2);
- /*
- =====================================================================
- 0x1c 0x1eh COLOR R_MASK G_MASK B_MASK 4_MASK DATA
- -------------------------------------------------------------------------------------------
- 1 1 B_RGB index 00 00 FF 00 00 FF 00 00 FF 00 00 00 .
- 4 4 B_RGB index 00 00 FF 00 00 FF 00 00 FF 00 00 00 X
- 4RLE 4 B_4RLE index 00 00 FF 00 00 FF 00 00 FF 00 00 00 RLE X (not support)
- 8 8 B_RGB index 00 00 FF 00 00 FF 00 00 FF 00 00 00 XX
- 8RLE 8 B_8RLE index 00 00 FF 00 00 FF 00 00 FF 00 00 00 RLE XX (not support)
- 16X555 16 B_RGB 555 00 7C 00 00 E0 03 00 00 1F 00 00 00 NONE XX XX
- 16A555 16 B_FIELED 555 00 7C 00 00 E0 03 00 00 1F 00 00 00 00 80 00 00 XX XX
- 16X444 16 B_FIELED 444 00 0F 00 00 F0 00 00 00 00 00 0F 00 00 00 00 00 XX XX
- 16A444 16 B_FIELED 444 00 0F 00 00 F0 00 00 00 00 00 0F 00 00 0F 00 00 XX XX
- 16X565 16 B_FIELED 565 00 F8 00 00 E0 07 00 00 1F 00 00 00 00 00 00 00 XX XX
- 24 24 B_RGB 888 00 00 FF 00 00 FF 00 00 FF 00 00 00 NONE XX XX XX
- 32X888R 32 B_FIELED 888 00 00 00 FF 00 00 FF 00 00 FF 00 00 00 00 00 00 XX XX XX XX
- 32A888R 32 B_RGB 888 00 00 FF 00 00 FF 00 00 FF 00 00 00 NONE XX XX XX XX
- ======================================================================
- OLED 16 00 1F 07 E0 F8 00 XX
- ======================================================================
- */
- if(stBmpHead.wBitPerPixel<=8)
- {
- if(stBmpHead.dwCompType==BMP_COMP_RLE4||stBmpHead.dwCompType==BMP_COMP_RLE8)
- {
- gxbErrCode = ERR_PE_UNSUPPORT_FORMAT; //Walace060817#2
- return FALSE; //not support
- }
- stBmpHead.bDataMask= (1<<stBmpHead.wBitPerPixel)-1;
- GetPaletteForOled();
- stBmpHead.bColorMode=BMP_COLOR_PATLETTE ;
- }
- else
- {
- GetRGBMask(pMask);
- stBmpHead.bColorMode=BMP_COLOR_MASK;
- }
- GetPhoCommonConfig();
- //Walace051214#FullScreen
- gxwDwordPerLine = ((DWORD)gxwPhoWidth*stBmpHead.wBitPerPixel+0x1f)>>5;
- return TRUE;
- }
- BOOL BmpInitial(void) //Walace060817#2
- {
- gdwFileSector=FS_UNOPENED;
- gxbfRotPhoto=FALSE; //Walace070108#2
- gxwYPixel=0; //Walace051214#FullScreen Remove
- gxwLineIndex=0;
- gxwYStep = 0 ; //Walace051214#FullScreen Remove
- gpwPalette=(PWORD)(gxbPhoData+SRAM_BMP_PALETTE_OFFSET);
- pMask=(RGBMASK*)(gxbPhoData+SRAM_BMP_PALETTE_OFFSET);
- FuncProtectMachine(DSP_PROT_SET_ON); //Walace060313#1
- FuncProtectMachine(MCU_PROT_WAIT_RESPONSE); //Walace060313#1
- if(!GetBmpConfig())
- return FALSE;
- gxdwFsByteIndex = stBmpHead.dwDataOffset;
- return TRUE;
- }
- void TransferColorToOled(DWORD dwDataBuff,PWORD pwPixelData) large
- {
- DWORD dwBuff;
- *pwPixelData=0x0000; // OLED 2 bytes per pixel RGB = (5 6 5)
- ReverseHLSB((PBYTE)&dwDataBuff,stBmpHead.wBitPerPixel/8);
- dwDataBuff = dwDataBuff>>(32-stBmpHead.wBitPerPixel);
- dwBuff = (dwDataBuff&pMask->dwBMask)>>pMask->bBOffset;
- (*pwPixelData)|= ((dwBuff<<OLED_B_BITS)>>pMask->bBLen)<<OLED_B_OFFSET; // Bo = (B*2^5)/(2^B-BITS) << 11
- dwBuff = (dwDataBuff&pMask->dwGMask)>>pMask->bGOffset;
- (*pwPixelData)|= ((dwBuff<<OLED_G_BITS)>>pMask->bGLen)<<OLED_G_OFFSET; // Go = (G*2^6)/(2^G-BITS) << 5
- dwBuff = (dwDataBuff&pMask->dwRMask)>>pMask->bROffset;
- (*pwPixelData)|= ((dwBuff<<OLED_R_BITS)>>pMask->bRLen)<<OLED_R_OFFSET; // Ro = (R*2^5)/(2^R-BITS) << 0
- }
- //Walace051214#FullScreen
- void BmpSendPixelToOled(WORD wCol,WORD wRow,WORD wPixelData)
- {
- if(gxbfRotPhoto) //Walace070108#2
- RotToCenter(gxwPhotoDispWidth,gxwPhotoDispHeight,&wCol,&wRow);
- else
- MoveToCenter(gxwPhotoDispWidth,gxwPhotoDispHeight,&wCol,&wRow);
- if(stBmpHead.bStoreDir==BMP_DIR_BOTTOM_TOP)
- wRow = UI_PHOTO_DISP_SIZE_ROW-1-wRow; //Walace060320#3
- if((wCol<UI_PHOTO_DISP_SIZE_COL)&&(wRow<UI_PHOTO_DISP_SIZE_ROW)) //Walace060320#3
- {
- #if(LCD_TYPE==TFT_ORISE||LCD_TYPE==TFT_TOPPOLY||LCD_TYPE==TFT_SOLOMON) // Jeff070125#2
- OledDrawPoint(wCol,wRow,wPixelData);
- #else
- OLED_WRITE(OLED_CMD_SET_COL_ADDR) ;
- OLED_WRITE(wCol);
- OLED_WRITE(wCol);
- OLED_WRITE(OLED_CMD_SET_ROW_ADDR) ;
- OLED_WRITE(wRow);
- OLED_WRITE(wRow);
- OLED_SET_DAT();
- OLED_WRITE_WDATA(wPixelData) ;
- OLED_SET_CMD();
- #endif
- }
- }
- //Walace051212#FullScreen start
- BYTE BmpShow()
- {
- BYTE bCount;
- DWORD dwDataBuff;
- DWORD dwGetIndexPerLine;
- WORD wPixelData;
- WORD wGetDataUnit; //can hold
- WORD wPhotoXIndex;
- gxwXPixel=0;
- gxwXStep=0;
- wPhotoXIndex=0;
- dwGetIndexPerLine=0;
- gxwYStep+=gxwSampleSize;
- gxwLineIndex ++;
- if(gxwLineIndex>gxwPhoHeight)
- return IMG_PRC_COMPLETE;
- if(!(gxwYStep&0x8000))
- {
- gxdwFsByteIndex+=(gxwDwordPerLine<<2);
- return IMG_PRC_SUCCESS;
- }
- wGetDataUnit = stBmpHead.wBitPerPixel>>3;
- if(!wGetDataUnit)
- wGetDataUnit=1;
- #if(LCD_TYPE==TFT_ORISE||LCD_TYPE==TFT_TOPPOLY||LCD_TYPE==TFT_SOLOMON) //Walace061020#1 // Jeff070125#2
- LCD_ROT90_DISPLAY_DIS();
- #endif
- OledCtrlEn();
- while(TRUE)
- {
- OledCtrlDis();
- if(!GetFsData((PBYTE)&dwDataBuff,gxdwFsByteIndex+dwGetIndexPerLine,&wGetDataUnit))
- return IMG_PRC_ERR;
- dwGetIndexPerLine+=wGetDataUnit;
- OledCtrlEn();
- if(stBmpHead.bColorMode==BMP_COLOR_PATLETTE)
- {
- for(bCount=1;bCount<=(8/stBmpHead.wBitPerPixel);bCount++)
- {
- wPhotoXIndex++;
- if(wPhotoXIndex>gxwPhoWidth)
- goto EndOfLine;
- gxwXStep+=gxwSampleSize;
- if(!(gxwXStep&0x8000))
- continue;
- dwDataBuff = ((*(PBYTE)&dwDataBuff)>>(8-stBmpHead.wBitPerPixel*bCount))&stBmpHead.bDataMask;
- BmpSendPixelToOled(gxwXPixel,gxwYPixel,gpwPalette[dwDataBuff]);
- gxwXPixel++;
- gxwXStep&=(~0x8000);
- }
- }
- else
- {
- wPhotoXIndex++;
- if(wPhotoXIndex>gxwPhoWidth)
- goto EndOfLine;
- gxwXStep+=gxwSampleSize;
- if(!(gxwXStep&0x8000))
- continue;
- TransferColorToOled(dwDataBuff,&wPixelData);
- BmpSendPixelToOled(gxwXPixel,gxwYPixel,wPixelData);
- gxwXPixel++;
- gxwXStep&=(~0x8000);
- }
- }
- EndOfLine:
- #if(LCD_TYPE==TFT_ORISE||LCD_TYPE==TFT_TOPPOLY||LCD_TYPE==TFT_SOLOMON) //Walace061020#1 // Jeff070125#2
- LCD_ROT90_DISPLAY_DIS();
- #endif
- OledCtrlDis();
- gxwYPixel++;
- gxwYStep&=(~0x8000);
- gxdwFsByteIndex+=(gxwDwordPerLine<<2);
- return IMG_PRC_SUCCESS;
- }
- //Walace051212#FullScreen end
- BYTE BmpDispProcess(BYTE bBmpCmd)
- {
- BYTE bRet;
- if(bBmpCmd==BMP_CMD_START)
- {
- gxbBmpProcState = BMP_PRC_INITIAL;
- }
- switch(gxbBmpProcState)
- {
- case BMP_PRC_IDLE:
- break;
- case BMP_PRC_INITIAL:
- if(BmpInitial())
- gxbBmpProcState = BMP_PRC_SHOW;
- else
- gxbBmpProcState = BMP_PRC_ERR;
- break;
- case BMP_PRC_SHOW:
- bRet = BmpShow();
- if(bRet == IMG_PRC_SUCCESS)
- { gxbBmpProcState = BMP_PRC_SHOW; }
- else if(bRet==IMG_PRC_COMPLETE)
- { gxbBmpProcState = BMP_PRC_IDLE; }
- else
- {
- gxbBmpProcState = BMP_PRC_ERR;
- }
- break;
- case BMP_PRC_ERR:
- gxbBmpProcState = BMP_PRC_IDLE;
- return BMP_SHOW_RET_ERR;
- //break; //Walace060817#4
- case BMP_PRC_END:
- gxbBmpProcState = BMP_PRC_IDLE;
- return BMP_SHOW_RET_END;
- //break; //Walace060816#4
- }
- }
- #endif //#if(PHOTO_SUPPORT_BMP)
- //Walace061018#2 bmp dsp decode
- #if(PHOTO_BMP_DSP_DECODE)
- BOOL BmpFormatCheck(void)
- {
- BMPHEADERINFO xdata stBmpHead;
- DWORD dwBuff=0;
- INT iBuff;
- WORD wLen;
- BOOL fRet;
- fRet=TRUE;
- dwBuff=0;
- gdwFileSector=FS_UNOPENED;
- wLen=2;
- GetFsData((PBYTE)&dwBuff,BMP_HEAD_IDENTIFIER,&wLen);
- if(dwBuff!=0x424D0000) // 'BM'=0x4d42
- {
- gxbErrCode = ERR_PE_UNSUPPORT_FORMAT; //Walace060817#2
- fRet = FALSE; // only support microsoft type
- goto END_OF_CEHCK_FORMAT;
- }
- wLen=4;
- GetFsData((PBYTE)&(stBmpHead.dwDataOffset),BMP_HEAD_DATA_OFFSET,&wLen);
- ReverseHLSB((PBYTE)(&(stBmpHead.dwDataOffset)),4);
- GetFsData((PBYTE)&dwBuff,BMP_HEAD_WIDTH,&wLen);
- ReverseHLSB((PBYTE)&dwBuff,4);
- gxwPhoWidth=(WORD)dwBuff;
- GetFsData((PBYTE)&dwBuff,BMP_HEAD_HEIGHT,&wLen);
- ReverseHLSB((PBYTE)&dwBuff,4);
- iBuff=(INT)dwBuff;
- if(iBuff<0)
- { stBmpHead.bStoreDir = BMP_DIR_TOP_BOTTOM;
- gxwPhoHeight = (WORD)(-iBuff);
- }
- else
- { stBmpHead.bStoreDir = BMP_DIR_BOTTOM_TOP;
- gxwPhoHeight = (WORD)iBuff;
- }
- GetFsData((PBYTE)&(stBmpHead.dwCompType),BMP_HEAD_COMP_TYPE,&wLen);
- ReverseHLSB((PBYTE)(&(stBmpHead.dwCompType)),4);
- wLen=2;
- GetFsData((PBYTE)&(stBmpHead.wBitPerPixel),BMP_HEAD_PIXEL_BITS,&wLen);
- ReverseHLSB((PBYTE)(&(stBmpHead.wBitPerPixel)),2);
- /*
- =====================================================================
- 0x1c 0x1eh COLOR R_MASK G_MASK B_MASK 4_MASK DATA
- -------------------------------------------------------------------------------------------
- 1 1 B_RGB index 00 00 FF 00 00 FF 00 00 FF 00 00 00 .
- 4 4 B_RGB index 00 00 FF 00 00 FF 00 00 FF 00 00 00 X
- 4RLE 4 B_4RLE index 00 00 FF 00 00 FF 00 00 FF 00 00 00 RLE X (not support)
- 8 8 B_RGB index 00 00 FF 00 00 FF 00 00 FF 00 00 00 XX
- 8RLE 8 B_8RLE index 00 00 FF 00 00 FF 00 00 FF 00 00 00 RLE XX (not support)
- 16X555 16 B_RGB 555 00 7C 00 00 E0 03 00 00 1F 00 00 00 NONE XX XX
- 16A555 16 B_FIELED 555 00 7C 00 00 E0 03 00 00 1F 00 00 00 00 80 00 00 XX XX
- 16X444 16 B_FIELED 444 00 0F 00 00 F0 00 00 00 00 00 0F 00 00 00 00 00 XX XX
- 16A444 16 B_FIELED 444 00 0F 00 00 F0 00 00 00 00 00 0F 00 00 0F 00 00 XX XX
- 16X565 16 B_FIELED 565 00 F8 00 00 E0 07 00 00 1F 00 00 00 00 00 00 00 XX XX
- 24 24 B_RGB 888 00 00 FF 00 00 FF 00 00 FF 00 00 00 NONE XX XX XX
- 32X888R 32 B_FIELED 888 00 00 00 FF 00 00 FF 00 00 FF 00 00 00 00 00 00 XX XX XX XX
- 32A888R 32 B_RGB 888 00 00 FF 00 00 FF 00 00 FF 00 00 00 NONE XX XX XX XX
- ======================================================================
- OLED 16 00 1F 07 E0 F8 00 XX
- ======================================================================
- */
- if(stBmpHead.wBitPerPixel<=8)
- {
- if(stBmpHead.dwCompType==BMP_COMP_RLE4||stBmpHead.dwCompType==BMP_COMP_RLE8)
- {
- gxbErrCode = ERR_PE_UNSUPPORT_FORMAT; //Walace060817#2
- fRet = FALSE; //not support
- goto END_OF_CEHCK_FORMAT;
- }
- }
- END_OF_CEHCK_FORMAT:
- return fRet;
- }
- #endif