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

📄 test.c

📁 以一种4级灰度的液晶为例
💻 C
字号:
/*小于112x64的任意单色BMP位图文件转换成C代码格式
转换后的点阵排列顺序:
  .............. 896
  ..............
 113 114 115 ... 224  
 1   2   3   ... 112
*/

#include "stdio.h"

int main(void)
{
	FILE *fp,*fout;
	unsigned short t,widthbmp,heightbmp;      //bmp store width and height
	unsigned char ch1,ch2,width,height,heightlcd;
	unsigned char image[1024];
	unsigned char temp[7168];
	unsigned char lcd[896];
	int i,j,k;
	if((fp=fopen("screen.bmp","rb"))==NULL)
	{
		printf("Can't open screen.bmp\n");
		return 0;
	}
	if((fout=fopen("screen.h","wt"))==NULL)
	{
		printf("Can't open screen.h\n");
		return 0;
	}
	ch1=fgetc(fp);
	ch2=fgetc(fp);
	if((ch1!='B')||(ch2!='M'))
	{
		printf("Not BMP file\n");
		return 0;
	}
	fseek(fp,0x0e,0);
	ch1=fgetc(fp);
	if(ch1!=0x28)
	{
		printf("Not windows BMP\n");
		return 0;
	}
	fseek(fp,0x12,0);
	width=fgetc(fp);
	
	if(width%8==0)
		t=width/8;
	else
		t=width/8+1;
	if(t%4==0)
		widthbmp=t;
	else
		widthbmp=(t+4-(t%4));
	
	fseek(fp,0x16,0);
	height=fgetc(fp);
	if(height%8==0)
	{
		heightbmp=height;
		heightlcd=height/8;
	}
	else
	{
		heightbmp=(height/8+1)*8;
		heightlcd=height/8+1;
	}
	fseek(fp,0x1c,0);
	ch1=fgetc(fp);
	if(ch1!=0x01)
	{
		printf("Not a Black-White image file\n");
		return 0;
	}
	fseek(fp,0x0a,0);
	ch1=fgetc(fp);
	fseek(fp,ch1,0);
	fread(image,1024,1,fp);
	for(i=0;i<7168;i++) temp[i]=1;
	for(j=0;j<height;j++)
		for(i=0;i<t;i++)
			for(k=0;k<8;k++)
				temp[8*i+k+j*t*8]=(((image[i+j*widthbmp]<<k)&0x80)>>7);
	for(i=0;i<7168;i++)
		temp[i]=(temp[i]-1)&1;
	for(j=0;j<heightlcd;j++)
		for(i=0;i<width;i++)
		{
			lcd[j*width+i]=0;
			for(k=0;k<8;k++)
				lcd[j*width+i]=lcd[j*width+i]+(temp[i+k*t*8+j*8*t*8]<<k);
		}

		
	fprintf(fout,"//width=%d t=%d widthbmp=%d heightlcd=%d\n",width,t,widthbmp,heightlcd);

	fprintf(fout,"const unsigned char screen[%d]={%d,%d,\n",width*heightlcd+2,width,heightlcd);
	//swap bit order in byte
	//these code used in handset only
	/*for(i=0;i<t*heightbmp;i++)
	{
		ch1=0;
		for(j=0;j<8;j++)
		{
			 ch1=ch1+((lcd[i] & 1)<<(7-j));
			 lcd[i]=lcd[i]>>1;
		}
		lcd[i]=ch1;
	}*/
	//end swap

	for(i=0;i<(heightlcd);i++)
	{
		for(j=0;j<width;j++)
			fprintf(fout,"0x%x,",lcd[j+i*width]);
		fprintf(fout,"\n");
	}
	fprintf(fout,"};\n");

	printf("ok\n");
	fclose(fp);
	return 1;
}

⌨️ 快捷键说明

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