📄 output.c
字号:
fprintf(gv_pfOutput_C, "#define FORM_RESOURCE_DEFINE \n");
else
{
fprintf(gv_pfOutput_C, "#define FORM_RESOURCE_DEFINE \\\n");
for(i=0;i<nFormDefineInfoCount;i++)
{
WriteSpace(gv_pfOutput_C,StartColumn);
if(i!=nFormDefineInfoCount-1)
fprintf(gv_pfOutput_C, "%s \\\n",pFormDefineInfo[i]);
else
fprintf(gv_pfOutput_C, "%s \n",pFormDefineInfo[i]);
}
}
//Menu Resource Define
fprintf(gv_pfOutput_C, "\n//Menu Resource define\n");
if(nMenuDefineInfoCount==0)
fprintf(gv_pfOutput_C, "#define MENU_RESOURCE_DEFINE \n");
else
{
fprintf(gv_pfOutput_C, "#define MENU_RESOURCE_DEFINE \\\n");
for(i=0;i<nMenuDefineInfoCount;i++)
{
WriteSpace(gv_pfOutput_C,StartColumn);
if(i!=nMenuDefineInfoCount-1)
fprintf(gv_pfOutput_C, "%s \\\n",pMenuDefineInfo[i]);
else
fprintf(gv_pfOutput_C, "%s \n",pMenuDefineInfo[i]);
}
}
//Alert Resurce Define
fprintf(gv_pfOutput_C, "\n//Menu Resource define\n");
if(nAlertDefineInfoCount==0)
fprintf(gv_pfOutput_C, "#define ALERT_RESOURCE_DEFINE \n");
else
{
fprintf(gv_pfOutput_C, "#define ALERT_RESOURCE_DEFINE \\\n");
for(i=0;i<nAlertDefineInfoCount;i++)
{
WriteSpace(gv_pfOutput_C,StartColumn);
if(i!=nAlertDefineInfoCount-1)
fprintf(gv_pfOutput_C, "%s \\\n",pAlertDefineInfo[i]);
else
fprintf(gv_pfOutput_C, "%s \n",pAlertDefineInfo[i]);
}
}
//Bitmap Resurce Define
fprintf(gv_pfOutput_C, "\n//Bitmap Resource define\n");
if(nBitmapDefineInfoCount==0)
fprintf(gv_pfOutput_C, "#define BITMAP_RESOURCE_DEFINE \n");
else
{
fprintf(gv_pfOutput_C, "#define BITMAP_RESOURCE_DEFINE \\\n");
for(i=0;i<nBitmapDefineInfoCount;i++)
{
WriteSpace(gv_pfOutput_C,StartColumn);
if(i!=nBitmapDefineInfoCount-1)
fprintf(gv_pfOutput_C, "%s \\\n",pBitmapDefineInfo[i]);
else
fprintf(gv_pfOutput_C, "%s \n",pBitmapDefineInfo[i]);
}
}
}
#define AUTO_COLORS 1
#define EXCHANGE_BITS 1
//windows Type define
#define WORD unsigned short
#define DWORD unsigned long
#define LONG long
#define UINT unsigned int
#define INT int
#pragma pack(push,BitmapStructDefine,2)
typedef struct tagBITMAPFILEHEADER {
WORD bfType;
DWORD bfSize;
WORD bfReserved1;
WORD bfReserved2;
DWORD bfOffBits;
} BITMAPFILEHEADER;
typedef struct tagBITMAPINFOHEADER{
DWORD biSize;
LONG biWidth;
LONG biHeight;
WORD biPlanes;
WORD biBitCount;
DWORD biCompression;
DWORD biSizeImage;
LONG biXPelsPerMeter;
LONG biYPelsPerMeter;
DWORD biClrUsed;
DWORD biClrImportant;
} BITMAPINFOHEADER;
#pragma pack(pop,BitmapStructDefine)
typedef struct _EOS_BitmapType
{
short imWidth; /* Pixel width (X) */
short imHeight; /* Pixel height (Y) */
unsigned char imAlign; /* Image alignment */
unsigned char imFlags; /* Image flags */
short imRowBytes; /* Bytes per row */
short imBits; /* Bits per pixel */
short imPlanes; /* Planes per pixel */
unsigned char imData[16384]; /* (image data, variable length)*/
} EOS_BitmapType;
char * gpszBitmapTypeName[100]; //已有的Bitmap类型
int gnBitmapTypeCount=0;
int WriteBitmapType2CFile(FILE * fBmp,BITMAPINFOHEADER *pBitmapHeader)
{
char szBitmapTypeName[1024];
int i;
sprintf(szBitmapTypeName,"%s_Bitmap_%dx%dx2",gv_IDPrefix,pBitmapHeader->biWidth,pBitmapHeader->biHeight);
for(i=0;i<gnBitmapTypeCount;i++)
{
if(strcmp(szBitmapTypeName,gpszBitmapTypeName[i])==0)
return 1;
}
gpszBitmapTypeName[gnBitmapTypeCount++]=strdup(szBitmapTypeName);
//xxx_h.h
fprintf(gv_pfOutput_H,"\ntypedef struct _%s\n{\n",szBitmapTypeName);
WriteSpace(gv_pfOutput_H,gv_StartColumn);
fprintf(gv_pfOutput_H,"BitmapType imghead; // Image Header record structure\n");
WriteSpace(gv_pfOutput_H,gv_StartColumn);
fprintf(gv_pfOutput_H,"UInt8 imData[%d*%d]; // (image data, variable length)\n",
(pBitmapHeader->biWidth+3)/4,pBitmapHeader->biHeight);
fprintf(gv_pfOutput_H,"} %s;\n",szBitmapTypeName);
return 0;
}
int CovertBitmap2CFile(FILE * fBmp,char *szBitmapIdName)
{
BITMAPFILEHEADER bitmapFileHeader;
BITMAPINFOHEADER bitmapHeader;
EOS_BitmapType DstBmp;
UINT u32ReadLen;
int StartColumn;
char szBitmapTypeName[1024];
char szBitmapName[1024];
unsigned char lpBuf[1024];
int nRow,nCol;
char lpTable[]="0123456789ABCDEF";
unsigned int pnColors[4]={0,0,0,0};
unsigned int nColorSum;
unsigned char ucColor;
unsigned char * pByte;
int nNumColors=0;
int i;
int bAutoColors=AUTO_COLORS;
int bXchBit=EXCHANGE_BITS;
u32ReadLen=fread(&bitmapFileHeader,1,sizeof(BITMAPFILEHEADER),fBmp);
u32ReadLen=fread(&bitmapHeader,1,sizeof(BITMAPINFOHEADER),fBmp);
if(bitmapHeader.biBitCount!=24)
{
sprintf(lpBuf,"Error: %s: BMP file request 24bit color depth.",szBitmapIdName);
Error(lpBuf);
}
DstBmp.imHeight=(short)bitmapHeader.biHeight;
DstBmp.imWidth=(short)bitmapHeader.biWidth;
DstBmp.imAlign=0;
DstBmp.imFlags=0;
DstBmp.imPlanes=1;
DstBmp.imBits=2;
DstBmp.imRowBytes=DstBmp.imWidth/4;
if(DstBmp.imWidth%4)
DstBmp.imRowBytes++;
memset(DstBmp.imData,0,DstBmp.imRowBytes*DstBmp.imHeight);
if(bAutoColors)
{
for(nRow=0;nRow<DstBmp.imHeight;nRow++)
{
for(nCol=0;nCol<DstBmp.imWidth;nCol++)
{
u32ReadLen=fread(lpBuf,1,3,fBmp);
if(u32ReadLen!=3)
{
// MessageBox("Wrong BMP file!");
sprintf(lpBuf,"Error: %s: Wrong BMP file!",szBitmapIdName);
Error(lpBuf);
return -1;
}
nColorSum=lpBuf[0]+lpBuf[1]+lpBuf[2];
for(i=0;i<nNumColors;i++)
{
if(pnColors[i]==nColorSum)
break;
}
if(i==nNumColors)
{
if(nNumColors<4)
pnColors[nNumColors++]=nColorSum;
else
{
sprintf(lpBuf,"Error: %s: BMP File has more colors! Max colors is 4!",szBitmapIdName);
Error(lpBuf);
// MessageBox("BMP文件颜色数太多,请修改BMP文件。");
}
}
}
if(DstBmp.imWidth*3 % 4)
{
u32ReadLen=fread(lpBuf,1,4-(DstBmp.imWidth*3 % 4),fBmp);
if(u32ReadLen!=(UINT)(4-(DstBmp.imWidth*3 % 4)))
{
// MessageBox("Wrong BMP file!");
sprintf(lpBuf,"Error: %s: Wrong BMP file!",szBitmapIdName);
Error(lpBuf);
return -1;
}
}
}
for(i=0;i<nNumColors;i++)
{
int j;
for(j=0;j<nNumColors-1;j++)
if(pnColors[j]<pnColors[j+1])
{
unsigned int TempColor;
TempColor=pnColors[j];
pnColors[j]=pnColors[j+1];
pnColors[j+1]=TempColor;
}
}
if(nNumColors==1)
{
nNumColors=4;
if(pnColors[0]<=192)
pnColors[3]=pnColors[0];
else if(pnColors[0]<=384)
pnColors[2]=pnColors[0];
else if(pnColors[0]<=576)
pnColors[1]=pnColors[0];
}
if(nNumColors==2)
{
nNumColors=4;
if(pnColors[1]!=0)
{
if(pnColors[1]<384)
pnColors[2]=pnColors[1];
}
}
if(nNumColors==3)
{
nNumColors=4;
if(pnColors[2]==0)
{
if((pnColors[1]-pnColors[2])<=(pnColors[0]-pnColors[1]))
pnColors[2]=pnColors[1];
}
}
fseek(fBmp,bitmapFileHeader.bfOffBits,0);
}
else
{
pnColors[0]=765;
pnColors[1]=576;
pnColors[2]=384;
pnColors[3]=192;
}
for(nRow=0;nRow<DstBmp.imHeight;nRow++)
{
for(nCol=0;nCol<DstBmp.imWidth;nCol++)
{
u32ReadLen=fread(lpBuf,1,3,fBmp);
if(u32ReadLen!=3)
{
// MessageBox("Wrong BMP file!");
sprintf(lpBuf,"Error: %s: Wrong BMP file!",szBitmapIdName);
Error(lpBuf);
return -2;
}
nColorSum=lpBuf[0]+lpBuf[1]+lpBuf[2];
if(nColorSum<=pnColors[3])
ucColor=3;
else if(nColorSum<=pnColors[2])
ucColor=2;
else if(nColorSum<=pnColors[1])
ucColor=1;
else if(nColorSum<=pnColors[0])
ucColor=0;
else
ucColor=0;
pByte=DstBmp.imData+(DstBmp.imRowBytes*(DstBmp.imHeight-nRow-1)+nCol/4);
if(bXchBit)
ucColor=ucColor<<((3-nCol%4)*2);
else
ucColor=ucColor<<(nCol%4*2);
*pByte=*pByte|ucColor;
}
if(DstBmp.imWidth*3 % 4)
{
u32ReadLen=fread(lpBuf,1,4-(DstBmp.imWidth*3 % 4),fBmp);
if(u32ReadLen!=(UINT)(4-(DstBmp.imWidth*3 % 4)))
{
// MessageBox("Wrong BMP file!");
sprintf(lpBuf,"Error: %s: Wrong BMP file!",szBitmapIdName);
Error(lpBuf);
return -1;
}
}
}
WriteBitmapType2CFile(fBmp,&bitmapHeader);
sprintf(szBitmapTypeName,"%s_Bitmap_%dx%dx2",gv_IDPrefix,bitmapHeader.biWidth,bitmapHeader.biHeight);
sprintf(szBitmapName,"%s_Bitmap_%s",gv_IDPrefix,szBitmapIdName);
//save Bitmap define info for resource
sprintf(szDefineInfoBuf,"{kBitmapRscType,%s_ID_BITMAP_%s,(void*)&%s,sizeof(%s)},",gv_IDPrefix,
szBitmapIdName,szBitmapName,szBitmapName);
if(nBitmapDefineInfoCount==MAX_OBJECT)
{
sprintf(lpBuf,"Error: %s: Exceed Bitmap number limit,max number is %d.",
szBitmapIdName,MAX_OBJECT);
Error(lpBuf);
return -3;
}
pBitmapDefineInfo[nBitmapDefineInfoCount]=strdup(szDefineInfoBuf);
nBitmapDefineInfoCount++;
//xxx_c.h
fprintf(gv_pfOutput_C,"const %s %s=\n",szBitmapTypeName,szBitmapName);
fprintf(gv_pfOutput_C,"{\n");
StartColumn=gv_StartColumn;
WriteSpace(gv_pfOutput_C,StartColumn);
fprintf(gv_pfOutput_C,"\t%d,%d,\t//imWidth,imHeight\n",DstBmp.imWidth,DstBmp.imHeight);
WriteSpace(gv_pfOutput_C,StartColumn);
fprintf(gv_pfOutput_C,"\t%d,%d,\t//imAlign,imFlags\n",DstBmp.imAlign,DstBmp.imFlags);
WriteSpace(gv_pfOutput_C,StartColumn);
fprintf(gv_pfOutput_C,"\t%d,\t//imRowBytes\n",DstBmp.imRowBytes);
WriteSpace(gv_pfOutput_C,StartColumn);
fprintf(gv_pfOutput_C,"\t%d,\t//imBits\n",DstBmp.imBits);
WriteSpace(gv_pfOutput_C,StartColumn);
fprintf(gv_pfOutput_C,"\t%d,\t//imPlanes\n",DstBmp.imPlanes);
WriteSpace(gv_pfOutput_C,StartColumn);
fprintf(gv_pfOutput_C,"\t//Bmp Datas\n",DstBmp.imPlanes);
WriteSpace(gv_pfOutput_C,StartColumn);
for(nRow=0;nRow<DstBmp.imHeight;nRow++)
{
fprintf(gv_pfOutput_C,"\t");
for(i=0;i<DstBmp.imRowBytes;i++)
{
lpBuf[0]='0';
lpBuf[1]='x';
lpBuf[2]=lpTable[(DstBmp.imData[nRow*DstBmp.imRowBytes+i]>>4)&0xf];
lpBuf[3]=lpTable[DstBmp.imData[nRow*DstBmp.imRowBytes+i]&0xf];
lpBuf[4]=',';
lpBuf[5]='\0';
fprintf(gv_pfOutput_C,lpBuf);
}
fprintf(gv_pfOutput_C,"\n");
if(nRow!=DstBmp.imHeight-1)
WriteSpace(gv_pfOutput_C,StartColumn);
}
fprintf(gv_pfOutput_C,"};\n");
return 0;
}
void DumpBitmap2CFile(char * szBitmapFileName,char *szBitmapIdName,int idBitmap)
{
FILE * fBmp;
char lpBuf[1024];
fBmp=fopen(szBitmapFileName,"rb");
if(!fBmp)
{
sprintf(lpBuf,"Error: %s: File not found or can't not be open!",szBitmapFileName);
Error(lpBuf);
return;
}
CovertBitmap2CFile(fBmp,szBitmapIdName);
//xxx_def.h
WriteDefineInfo(NULL,0,"%s_ID_BITMAP_%s %d",gv_IDPrefix,szBitmapIdName,idBitmap);
fclose(fBmp);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -