void updateGameOver(void) { static int firstUpdate = 0; if(!firstUpdate) { file_handle scores = open_file("scores.txt", false); if( scores == -1) { printf("UH OH...\n"); } byte dataByte = alt_up_sd_card_read(scores); int i = 0; char buf[50]; while(dataByte >= 0 && i < 15) { buf[i] = dataByte; i++; dataByte = alt_up_sd_card_read(scores); } char* test = "99999"; draw_string(test, FINAL_SCORE_X, FINAL_SCORE_Y); draw_string(test, HIGH_SCORE_X, HIGH_SCORE_Y); firstUpdate = 1; } draw_box( 90, 130, 110, 140, back_alpha, 1); draw_bmp(cursor_bmp, 0, 240-cursor_bmp->bmp_info_header->height, false, back_alpha, 1); if(!button_states[0] || (!prev_controller_state.B_BUTTON && controller_state.B_BUTTON )) { close_bmp(background_bmp); changeState(MAIN_MENU); } else if(!button_states[1] || (!prev_controller_state.Y_BUTTON && controller_state.Y_BUTTON)) { close_bmp(background_bmp); changeState(LOADING_SCREEN); } }
/* ******************************************************************************* * Parse_Pic_BMP * * Description: * 以路径名来解析图片, 并且把解析处理的图片拷贝到指定的地址, * 如果指定的地址为NULL, 则可以存放在任何地址。 * * Parameters: * Path : input. 图片路径 * PictureInfo : output. 图片解析后的信息 * Addr : input. 存放解析后的图片, * * Return value: * void * * note: * void * ******************************************************************************* */ __s32 Parse_Pic_BMP_ByPath(char *Path, Picture_t *PictureInfo, __u32 Addr) { HBMP_i_t hbmp_buf; HBMP hbmp = NULL; eLIBs_memset(&hbmp_buf, 0, sizeof(HBMP_i_t)); hbmp = open_bmp(Path, &hbmp_buf); if(hbmp == NULL){ __wrn("ERR: open_bmp failed\n"); return -1; } PictureInfo->BitCount = get_bitcount(hbmp); PictureInfo->Width = get_width(hbmp); PictureInfo->Height = get_height(hbmp); PictureInfo->RowSize = get_rowsize(hbmp); PictureInfo->BufferSize = PictureInfo->RowSize * PictureInfo->Height; if(Addr){ PictureInfo->Buffer = (void *)Addr; }else{ PictureInfo->Buffer = (void *)esMEMS_Balloc(PictureInfo->BufferSize); } if(PictureInfo->Buffer == NULL){ __wrn("ERR: wboot_malloc failed\n"); goto error; } eLIBs_memset(PictureInfo->Buffer, 0, PictureInfo->BufferSize); get_matrix(hbmp, PictureInfo->Buffer); close_bmp(hbmp); hbmp = NULL; return 0; error: close_bmp(hbmp); return -1; }
int main(int argc, char *argv[]) { int cols, rows; char *pData,*data; char r,g,b; unsigned int bmpdata1[ROWS][COLS]; unsigned int pixel; unsigned int *pfbmap; struct fb_var_screeninfo fbvar; int fbfd; int i,j,k,t; if(argc != 2){ usage(); return 0; } /* ?��??? ???۸? ???? ?? */ fbfd = open(FBDEVFILE, O_RDWR); if(fbfd < 0){ perror("fbdev open"); exit(1); } /* mmap ?Լ??? ?̿??Ͽ? flame buffer?? ?????? ???? ?ּҸ? ?????? */ /* 1 pixel?? 2byte?? ?ʿ??ϹǷ? *2 */ pfbmap = (unsigned int *) mmap(0, COLS*ROWS*4,PROT_READ|PROT_WRITE, MAP_SHARED, fbfd, 0); if((unsigned)pfbmap == (unsigned)-1) { perror("fbdev mmap"); exit(1); } /* bmp????�� ?о? ?帲 */ read_bmp(argv[1], &pData, &data, &cols,&rows); /**************************** Image 1 *********************************/ i=0;j=0;k=0; for(j=0;j<rows;j++){ k = j*cols*3; /* ?? ?ȼ??? 3byte?ΰ?�� 2byte?? ?ٲ? */ printf("cols = %d, rows = %d, k = %d\n", cols, j+1, k); /* bmp image?? ?????? ?????ǹǷ? ?ؿ??????? ?о??;? ??. */ for(i=0;i<cols;i++) { b = *(data + (k + i*3)); g = *(data + (k + i*3+1)); r = *(data + (k + i*3+2)); pixel = (r << 16) | (g << 8) | (b); bmpdata1[(rows-1-j)][i] = pixel; } } /* bmp ???Ͽ??? ??�� data?? ?��??? ?????? ?? ī?? ?? */ //memcpy(pfbmap, bmpdata1, COLS*ROWS*4); memcpy(pfbmap, bmpdata1, COLS*ROWS*4); /* Ȱ?? ??�� ?θ???�� ??��?? ?? ?��??? ???۷? close ?? */ munmap(pfbmap,ROWS*COLS*4); close_bmp(&pData); close(fbfd); return 0; }
int main () { int i, j, k, t; int fbfd; int screen_width; int screen_height; int bits_per_pixel; int line_length; int coor_x, coor_y; int cols = 0, rows = 0; int mem_size; char *pData, *data; char r, g, b; unsigned long bmpdata[1280*800]; unsigned long pixel; unsigned char *pfbmap; unsigned long *ptr; struct fb_var_screeninfo fbvar; struct fb_fix_screeninfo fbfix; printf("=================================\n"); printf("Frame buffer Application - Bitmap\n"); printf("=================================\n\n"); char* file_name = "bike.bmp"; read_bmp(file_name, &pData, &data, &cols, &rows); printf("Bitmap : cols = %d, rows = %d\n", cols, rows); for(j = 0; j < rows; j++) { k = j * cols * 3; t = (rows - 1 - j) * cols; // 가로 size가 작을 수도 있다. for(i = 0; i < cols; i++) { b = *(data + (k + i * 3)); g = *(data + (k + i * 3 + 1)); r = *(data + (k + i * 3 + 2)); pixel = ((r<<16) | (g<<8) | b); bmpdata[t+i] = pixel; } } close_bmp(&pData); // 메모리 해제 if( (fbfd = open(FBDEV_FILE, O_RDWR)) < 0) // { printf("%s: open error\n", FBDEV_FILE); exit(1); } if( ioctl(fbfd, FBIOGET_VSCREENINFO, &fbvar) ) { printf("%s: ioctl error - FBIOGET_VSCREENINFO \n", FBDEV_FILE); exit(1); } if( ioctl(fbfd, FBIOGET_FSCREENINFO, &fbfix) ) // screen info를 얻어옴 { printf("%s: ioctl error - FBIOGET_FSCREENINFO \n", FBDEV_FILE); exit(1); } if (fbvar.bits_per_pixel != 32) { fprintf(stderr, "bpp is not 32\n"); exit(1); } screen_width = fbvar.xres; screen_height = fbvar.yres; bits_per_pixel = fbvar.bits_per_pixel; line_length = fbfix.line_length; mem_size = line_length * screen_height; printf("screen_width : %d\n", screen_width); printf("screen_height : %d\n", screen_height); printf("bits_per_pixel : %d\n", bits_per_pixel); printf("line_length : %d\n", line_length); pfbmap = (unsigned char *) mmap(0, mem_size, PROT_READ|PROT_WRITE, MAP_SHARED, fbfd, 0); // distance control int offset_x = 640; int offset_y = (screen_height - rows)/2; if ((unsigned)pfbmap == (unsigned)-1) { perror("fbdev mmap\n"); exit(1); } for(coor_y = 0; coor_y < screen_height; coor_y++) { ptr = (unsigned long *)pfbmap + (screen_width * coor_y); for(coor_x = 0; coor_x < screen_width; coor_x++){ *ptr++ = 0xFFFFFF; } } for(coor_y = offset_y; coor_y < rows +offset_y; coor_y++) { ptr = (unsigned long*)pfbmap + (screen_width * coor_y); for(coor_x = 0; coor_x < offset_x; coor_x++){ *ptr++ = 0xFFFFFF; } for (coor_x = offset_x; coor_x < cols +offset_x; coor_x++) { *ptr++ = bmpdata[coor_x-offset_x + (coor_y-offset_y)*cols]; } } munmap( pfbmap, mem_size); close( fbfd); return 0; }