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

📄 picture_explorer.c

📁 在linux下利用framebuffer编写的图片浏览程序
💻 C
📖 第 1 页 / 共 2 页
字号:

*(fbp + location) = color;
}void char_init(){   int n=0,w=0;   char init_char=' ';   for(w=0;w<95;w++)
      {
          char_array[w].ch=init_char;
          init_char++;
          char_array[w].offset=n;
          n=(w+1)*27;      }        for(l=0;l<95;l++)   { printf("%c %d ",char_array[l].ch,char_array[l].offset);   }}///////////////////////////////////////////////////////////////////////////////////////////////////void display_char(int d_screen_row,int d_screen_column,int d_height,int d_interval,int d_offset,unsigned char *d_after_convert_array){   int r=0,q=0,temp=0,save_offset=0,count=0,row_count=0;   temp=d_screen_column;   save_offset=d_offset;   for(r=d_screen_row;r<(d_screen_row+d_height);r++)       {         count++;         d_offset=save_offset;       for(temp=d_screen_column;temp<(d_screen_column+d_interval);temp++)           {            framebuffer(temp,r,*(d_after_convert_array+row_count*bytes+d_offset));            d_offset++;           }         row_count++;       }}///////////////////////////////////////////////////////////////////////////////////////////////////void show_string(int s_screen_row,int s_screen_column,int s_height,int s_interval,char string[100],unsigned char *s_after_convert_array){  char_init();  printf("s_screen_row=%d,s_screen_column=%d\n",s_screen_row,s_screen_column);  int vi=0,vj=0,vr=0,vc=0,number=0,counter=0;  while(string[vi]!='\0')    {      printf("%c",string[vi]);      vi++;    }    printf("The whole number is %d\n",vi);    number=vi;    for(vi=0;vi<number;vi++)    {      if(string[vi]==' ')        {         counter++;         printf("counter=%d\n",counter);         vr=s_screen_row;         vc=s_screen_column;         for(vr=s_screen_row;vr<(s_screen_row+s_height);vr++)             for(vc=s_screen_column;vc<(s_screen_column+s_interval);vc++)                      framebuffer(vc,vr,0);                   s_screen_column=s_screen_column+s_interval;        }      else      {      for(vj=0;vj<95;vj++)         {           if(string[vi]==char_array[vj].ch)              {               display_char(s_screen_row,s_screen_column,s_height,s_interval,char_array[vj].offset,s_after_convert_array);               s_screen_column=s_screen_column+s_interval;              }         }      }     }}///////////////////////////////////////////////////////////////////////////////////////////////////void clear_screen(){   int si,sj;   for(si=0;si<800;si++)      for(sj=0;sj<600;sj++)        framebuffer(si,sj,0);}///////////////////////////////////////////////////////////////////////////////////////////////////void show_picture(int p_screen_row,int p_screen_column,int p_height,int p_width,unsigned char *p_after_convert_array){  int pi,pj,r_count=0,p_offset=0;  for(pi=p_screen_row;pi<(p_screen_row+p_height);pi++)     {      p_offset=0;      r_count++;     for(pj=p_screen_column;pj<(p_screen_column+p_width);pj++)         {          framebuffer(pj,pi,*(p_after_convert_array+r_count*p_width+p_offset));          p_offset++;         }     }}///////////////////////////////////////////////////////////////////////////////////////////////////void bmp(int b_screen_row,int b_screen_column,char *file_name,int tag,char input_string[100]){        FILE *bfp;        int row=0,column=0;        bfp=judge_bmp(file_name);
	print_head_info(bfp);
        width=bitmapinfoheader.biwidth;
        height=bitmapinfoheader.biheight;        BytesPerLine=(width*8+31)/32*4;//计算每行的字节数        bytes=BytesPerLine;        printf("external variable bytes=%d\n",bytes);        printf("BytesPerLine=%d\nWidth=%d  Height=%d\n",BytesPerLine,width,height);
	unsigned char pixel_array[height][BytesPerLine];//pixel_array数组中存储的是位图文件中的像素数据        unsigned char after_convert_array[height][BytesPerLine];//after_convert_array数组存储的是经过转换变为framebuffer格式的数据        unsigned char charbuffer[height][interval];        //char_init();
        if(fread(&pixel,sizeof(char),1,bfp)!=1)
       {
	printf("fread error");
	exit(1);
       };
	fseek(bfp,1078, SEEK_SET);//将文件指针定位到实际存储像素处        for(i=height-1;i>=0;i--)        {           fread(pixel_array[height-1-row],1,BytesPerLine,bfp);//从位图文件最下面一行读取像素信息(bmp文件像素存储是倒着的)           for(column=0;column<BytesPerLine;column++)              {                after_convert_array[height-1-row][column]=convert(pixel_array[height-1-row][column]);                //实际图像第一行的信息是存储在文件最后一行的  row的初始值为0              }           row++;         }        //clear_screen();        if(tag==0)        show_string(b_screen_row,b_screen_column,height,interval,input_string,&after_convert_array[0][0]);        else if(tag==1)        show_picture(((600-height)/2),((800-width)/2),height,width,&after_convert_array[0][0]);
	fclose(bfp);}///////////////////////////////////////////////////////////////////////////////////////////////////void page_one(){        char prompt;        clear_screen();        bmp(480,200,bitmapname,0,"First Picture");        bmp(540,0,bitmapname,0,"PREV(p)");        bmp(540,300,bitmapname,0,"MAIN(m)");        bmp(540,600,bitmapname,0,"NEXT(n)");        bmp(50,100,bp,1,"no string");        scanf("%c",&prompt);        if(prompt=='n')            {              printf("jump to page one\n");              page_two();            }        else if((prompt=='p')||(prompt=='m'))            main_page();        else             printf("not jump\n");}void page_two(){        clear_screen();        char prompt;        bmp(480,200,bitmapname,0,"Second Picture");        bmp(540,0,bitmapname,0,"PREV(p)");        bmp(540,300,bitmapname,0,"MAIN(m)");        bmp(540,600,bitmapname,0,"NEXT(n)");        bmp(50,100,"4.bmp",1,"no string");         scanf("%c",&prompt);        if(prompt=='n')            {              printf("jump to page one\n");              page_three();            }        else if(prompt=='p')            page_one();        else if(prompt=='m')            main_page();        else             printf("not jump\n");}void main_page(){   char prompt;   bmp(200,100,bitmapname,0,"WELCOM TO LINUX WORLD");   bmp(540,0,bitmapname,0,"BEGIN(b)");   bmp(540,600,bitmapname,0,"JUMP(j)");   scanf("%c",&prompt);   if(prompt=='b')      page_two();}void page_three(){        clear_screen();        char prompt;        bmp(300,200,bitmapname,0,"Thanks for watching!");        bmp(540,0,bitmapname,0,"PREV(p)");        bmp(540,300,bitmapname,0,"MAIN(m)");        //bmp(540,600,bitmapname,0,"NEXT(n)");        //bmp(50,100,bp,1,"no string");         scanf("%c",&prompt);        if(prompt=='p')            page_two();        else if(prompt=='m')            main_page();        else             printf("not jump\n");}                              

 

⌨️ 快捷键说明

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