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

📄 bmp2c.cpp

📁 sharp的arm920t 7A400的评估板附带光盘Sharp KEVLH7A400 v0.3b Welcome to the SHARP KEV7A400 Evaluation board
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	   	fprintf (outfile,
                    "#define %s_BPP 16\n"
                    "const unsigned short %s_w = %d;\n"
   					  "const unsigned short %s_h = %d;\n"
                    "const unsigned short %s[] = {\n",
                    file,
                    file, bmi.bmiHeader.biWidth,
                    file,bmi.bmiHeader.biHeight,
                    file);
		   /*
   		 For each display line, convert the 24-bit colors to 16-bit 555 colors.
	   	 Re-order the lines for origin at upper left instead of lower right
	   	*/
			for (i=0;i<bmi.bmiHeader.biHeight; i++)
   		{
   			fprintf(outfile,"/*Line #%d*/\n",i);
		   	next_color = bmp +
   	   					(bmi.bmiHeader.biHeight-i-1) * bytes_per_line;
   		   for (j = 0; j<bmi.bmiHeader.biWidth;j++)
      		{
         		pixel_line[j].color.blue = (*next_color++)>>3;
		         pixel_line[j].color.green = (*next_color++)>>3;
   		      pixel_line[j].color.red = (*next_color++)>>3;
      		   pixel_line[j].color.unused = 0;
	      	}
	   	   for (j = 0; j<bmi.bmiHeader.biWidth-1;j++)
   	   	{
      			if ( (j%10) == 0)
	      	   {
   	   			fprintf (outfile,"\n");
	      	   }
   	  			fprintf (outfile, "0x%04x,",pixel_line[j].pixel);
	   	   }
	   	   if (i < bmi.bmiHeader.biHeight-1)
   	   	{
      	   	fprintf (outfile,"0x%04x,\n",pixel_line[j].pixel);
		      }
   		   else
      		{
         		fprintf (outfile,"0x%04x\n};\n",pixel_line[j].pixel);
		      }
   		}
			fclose(outfile);
		   free(pixel_line);

         /* write the .h file */
			strcpy(of_name,file);
         strcat(of_name,".h");
			outfile = fopen(of_name,"w");
         if (outfile == NULL)
         {
      		fprintf(stderr,"%s: cannot open output file %s\n",argv[0],of_name);
   			free(bmp);
            exit(-1);
         }

	   	fprintf (outfile,"/*\nThis file, %s, was automatically generated from"
   					  " file\n %s \nusing utility\n %s $Revision:   1.1  $.\n"
						  "Please do not edit it.\n*/\n",of_name,argv[1],argv[0]);
	   	fprintf (outfile,"#if !defined(INCLUDED_%s_H)\n",file);
	   	fprintf (outfile,"#define INCLUDED_%s_H\n",file);
     		fprintf (outfile,
                    "#define %s_BPP 16\n"
                    "extern const unsigned short %s_w;\n"
   					  "extern const unsigned short %s_h;\n"
                    "extern const unsigned short %s[];\n"
                    "#define %s_palette NULL\n",
                    file,file,
                    file,file,file);
  	   	fprintf (outfile,"#endif /* !defined(INCLUDED_%s_H)*/\n",file);
			fclose(outfile);
   	}	/* end if bmi.bmiHeader.biBitCount == 24 */
	   else if (bmi.bmiHeader.biBitCount == 8)
   	{
   		RGBQUAD * palette;
         const RGBQUAD black = {0,0,0,0};
	   	/* read 256-color bitmap file info*/

         /* fix clrUsed field in case it is 0 (all colors) */
         if (bmi.bmiHeader.biClrUsed == 0)
         {
         	bmi.bmiHeader.biClrUsed = 1<<bmi.bmiHeader.biBitCount;
         }
      	/* read the palette */
      	palette = (RGBQUAD *)malloc(bmi.bmiHeader.biClrUsed*sizeof(*palette));
      	if (palette == NULL)
      	{
      		fprintf(stderr,"%s: out of memory allocating palette\n",argv[0]);
   			fclose(infile);
		   	free(bmp);
    		   exit(-1);
      	}

   		if (fread(palette,
      				sizeof(*palette),
                  bmi.bmiHeader.biClrUsed,
                  infile) != bmi.bmiHeader.biClrUsed)
     		{
      		fprintf(stderr,"%s: error reading palette data\n",argv[0]);
         	fclose(infile);
         	free(bmp);
         	free(palette);
            exit(-1);
  	   	}
      	bytes_read += ( bmi.bmiHeader.biClrUsed * sizeof(*palette));
      	if (bytes_read != bf.bfOffBits)
     		{
      		fprintf(stderr,"%s: wrong number of bytes read\n",argv[0]);
         	fclose(infile);
         	free(bmp);
         	free(palette);
         	exit(-1);
  	   	}

     		bytes_read = fread(bmp,sizeof(bmp[0]),bmpsize,infile);
      	if (bytes_read != bmpsize)
  	   	{
      		fprintf(stderr,"%s: cannot read bitmap data\n",argv[0]);
         	fclose(infile);
         	free(bmp);
         	free(palette);
         	exit(-1);
      	}
			fclose(infile);

   		_splitpath(argv[1],drive,dir,file,ext);
         strcpy(of_name,file);
         strcat(of_name,".c");
			outfile = fopen(of_name,"w");
         if (outfile == NULL)
         {
      		fprintf(stderr,"%s: cannot open output file %s\n",argv[0],of_name);
         	free(bmp);
         	free(palette);
         	exit(-1);
         }
   		/*
	      compute bytes_per_line so that each line ends on an aligned,
   		4-byte boundary.
	   	*/
   		bytes_per_line = (((DWORD)bmi.bmiHeader.biWidth *
                     	(DWORD)bmi.bmiHeader.biBitCount + 31L) / 32L) * 4L;
	   	fprintf (outfile,"/*\nThis file, %s, was automatically generated from"
   					  " file\n %s \nusing utility\n %s $Revision:   1.1  $.\n"
						  "Please do not edit it.\n*/\n",of_name,argv[1],argv[0]);

	   	if (argc == 2)
         {
         	fprintf (outfile,
      				"\n\n/*\Below is a set of five variables: %s_w, the width,\n"
                  "%s_h, the height, %s_palette[], an array of palette\n"
                  "entries, %s_ncolors, the number of palette entries,\n"
                  " and the array %s[], an array of indices into the\n"
                  "palette array\n*/\n" ,file,file,file,file,file);
         }
         else
         {
         	fprintf (outfile,
      		  "\n\n/*\Below is a set of six variables: %s_w, the width,\n"
              "%s_h, the height, %s_palette[], an array of palette\n"
              "entries, %s_ncolors, the number of palette entries,\n"
              "the array %s[], an array of indices into the palette array,\n"
              "and %s_mask[], an array of mask bits (for sprites)\n*/\n"
                  ,file,file,file,file,file,file);
         }
   		//fprintf (outfile,"#include <ugl/ugl.h>\n");
   		fprintf (outfile,
                    "const unsigned short %s_w = %d;\n"
   					  "const unsigned short %s_h = %d;\n"
   					  "const unsigned short %s_ncolors = %d;\n"
                    "unsigned int %s_palette[] = {",
                    file, bmi.bmiHeader.biWidth,
                    file,bmi.bmiHeader.biHeight,
                    file,bmi.bmiHeader.biClrUsed,
                    file);

      	/* write out all but the last palette entry */
         k = 0;
      	for (i = 0; i< bmi.bmiHeader.biClrUsed-1; i++)
      	{
         	if ( (k%5) == 0)
            {
	   			fprintf (outfile,"\n");
            	k = 1;
            }
            else
            {
            	++k;
            }
	   		fprintf (outfile,"0x%08x, ",
         				UGL_MAKE_RGB(
                     		palette[i].rgbRed,
                           palette[i].rgbGreen,
                           palette[i].rgbBlue) );
      	}
      	/* last line of palette*/
   		fprintf (outfile,"\n0x%08x\n};\n\n",
         				UGL_MAKE_RGB(
                     		palette[i].rgbRed,
                           palette[i].rgbGreen,
                           palette[i].rgbBlue) );

   		/* write out bitmap */
   		fprintf (outfile,
                    "unsigned char %s[] = {",
                    file);
      	/* write the bitmap out; ignore padding bytes; origin upper left */
      	k = 0;
			for (i = bmi.bmiHeader.biHeight-1; i > 0 ; i--)
      	{
      		for (j=0; j < bmi.bmiHeader.biWidth; j++)
         	{
            	if ( (k % 10) == 0)
            	{
               	k = 1;
            		fprintf (outfile,"\n");
            	}
               else
               {
	            	++k;
               }
		   		fprintf (outfile,"0x%02x, ",bmp[i*bytes_per_line  + j]);
         	}
      	}
      	/* last line */
     		for (j=0; j < bmi.bmiHeader.biWidth-1; j++)
      	{
         	if ( (k % 10) == 0)
         	{
         		fprintf (outfile,"\n");
         	}
         	++k;
   			fprintf (outfile,"0x%02x, ",bmp[i*bytes_per_line  + j]);
      	}
      	/* last byte */
 			fprintf (outfile,"0x%02x\n};\n\n",bmp[i*bytes_per_line  + j]);

         if (argc == 3)
         {
         	unsigned char mask;
            int n;
         	/* then write out mask array */
            fprintf(outfile,"unsigned char %s_mask[] = {",file);
	      	k = 0;
				for (i = bmi.bmiHeader.biHeight-1; i > 0 ; i--)
      		{
      			for (j=0; j < bmi.bmiHeader.biWidth;)
         		{
            		if ( (k % 10) == 0)
	            	{
   	            	k = 1;
      	      		fprintf (outfile,"\n");
         	   	}
            	   else
               	{
	            		++k;
	               }
                  mask = 0;
                  for (n=7;n>=0 && j < bmi.bmiHeader.biWidth;n--,j++)
                  {
                  	mask |= (memcmp(palette+bmp[i*bytes_per_line  + j],
                             &black,sizeof(black) ) == 0 ? 0:1) << n;
                  }
			   		fprintf (outfile,"0x%02x,", mask);
      	   	}
	      	}
   	   	/* last line */
     			for (j=0; j < bmi.bmiHeader.biWidth;)
        		{
           		if ( (k % 10) == 0)
            	{
  	            	k = 1;
     	      		fprintf (outfile,"\n");
        	   	}
           	   else
              	{
            		++k;
               }
               mask = 0;
               for (n=7;n>=0 && j < bmi.bmiHeader.biWidth;n--,j++)
               {
                 	mask |= (memcmp(palette+bmp[i*bytes_per_line  + j],
                             &black,sizeof(black) ) == 0 ? 0:1) << n;
               }
               if (j == bmi.bmiHeader.biWidth)
               {
				   	fprintf (outfile,"0x%02x\n};\n\n", mask);
               }
               else
               {
				   	fprintf (outfile,"0x%02x,", mask);
               }
            }
         }


  			fclose(outfile);
         free(palette);

         /* write the .h file */
			strcpy(of_name,file);
         strcat(of_name,".h");
			outfile = fopen(of_name,"w");
         if (outfile == NULL)
         {
      		fprintf(stderr,"%s: cannot open output file %s\n",argv[0],of_name);
   			free(bmp);
            exit(-1);
         }

	   	fprintf (outfile,"/*\nThis file, %s, was automatically generated from"
   					  " file\n %s \nusing utility\n %s $Revision:   1.1  $.\n"
						  "Please do not edit it.\n*/\n",of_name,argv[1],argv[0]);

⌨️ 快捷键说明

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