首页 > 代码库 > nes 红白机模拟器 第5篇 全屏显示

nes 红白机模拟器 第5篇 全屏显示

先看一下效果图,全屏是全了,但是效果非常很一般(差)

技术分享

 

放大的原理是使用最初级的算法,直接取对应像素法。

 1 /**
 2  * 生成zoom 缩放表
 3  */
 4 int make_zoom_tab()
 5 {
 6     int i;
 7     zoom_x_tab = (int *)malloc(sizeof(int) * NES_DISP_WIDTH);
 8     if(NULL == zoom_x_tab)
 9     {
10         printf("make zoom_x_tab error\n");
11         return -1;
12     }
13     for(i=0; i<NES_DISP_WIDTH; i++)
14     {
15         zoom_x_tab[i] = i*lcd_width/NES_DISP_WIDTH;
16     }
17     zoom_y_tab = (int *)malloc(sizeof(int) * NES_DISP_HEIGHT);
18     if(NULL == zoom_y_tab)
19     {
20         printf("make zoom_y_tab error\n");
21         return -1;
22     }
23     for(i=0; i<NES_DISP_HEIGHT; i++)
24     {
25         zoom_y_tab[i] = i*lcd_height/NES_DISP_HEIGHT;
26     }
27     return 1;
28 }
29 
30 static int lcd_fb_display_px(WORD color, int x, int y)
31 {
32     unsigned char  *pen8;
33     unsigned short *pen16;
34     //从缩放表中取出对应的颜色值
35     x = zoom_x_tab[x];
36     y = zoom_y_tab[y];
37     pen8 = (unsigned char *)(fb_mem + y*line_width + x*px_width);
38     pen16 = (unsigned short *)pen8;
39     *pen16 = color;
40     
41     return 0;
42 }

 

马上更新高级点的放大算法。

nes 红白机模拟器 第5篇 全屏显示