📄 picture_explorer.c
字号:
*(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 + -