int left_sector (char *frameBuffer,int width, int height,int truex ,u32_t *buf32) { int i, j, m1, m2, m3, m4, m5, m6, m7; m1 = width / 8; m2 = width / 4; m3 = width / 4 + width / 8; m4 = width / 2; m5 = width / 2 + width / 8; m6 = width / 2 + width / 4; m7 = width / 2 + width / 8 + width / 4 ; for (i = 0; i <= width / 8; i++, m1++, m2++, m3++, m4++, m5++, m6++, m7++) { for (j = 0; j <= height; j++) { drawRect_rgbtest(i, width, j , truex, buf32[i + j * width], frameBuffer); drawRect_rgbtest(m1, width, j, truex, buf32[m1 + j * width], frameBuffer); drawRect_rgbtest(m2, width, j, truex, buf32[m2+ j * width], frameBuffer); drawRect_rgbtest(m3, width, j, truex, buf32[m3+ j * width], frameBuffer); drawRect_rgbtest(m4, width, j, truex, buf32[m4+ j * width], frameBuffer); drawRect_rgbtest(m5, width, j, truex, buf32[m5 + j * width], frameBuffer); drawRect_rgbtest(m6, width, j, truex, buf32[m6 + j * width], frameBuffer); drawRect_rgbtest(m7, width, j, truex, buf32[m7 + j * width], frameBuffer); } usleep (10000); } return 0; }
int down_sector (char *frameBuffer,int width, int height, u32_t *buf32) { int i, j, m1, m2, m3, m4, m5, m6, m7; m1 = height / 8; m2 = height / 4; m3 = height / 4 + height / 8; m4 = height / 2; m5 = height / 2 + height / 8; m6 = height / 2 + height / 4; m7 = height / 2 + height / 8 + height / 4 - 1; for (j = 0; j <= height / 8; j++, m1++, m2++, m3++, m4++, m5++, m6++, m7++) { for (i = 0; i <= width; i++) { drawRect_rgbtest(i, width, j , buf32[i + j * width], frameBuffer); drawRect_rgbtest(i, width, m1, buf32[i + m1 * width], frameBuffer); drawRect_rgbtest(i, width, m2, buf32[i + m2 * width], frameBuffer); drawRect_rgbtest(i, width, m3, buf32[i + m3 * width], frameBuffer); drawRect_rgbtest(i, width, m4, buf32[i + m4 * width], frameBuffer); drawRect_rgbtest(i, width, m5, buf32[i + m5 * width], frameBuffer); drawRect_rgbtest(i, width, m6, buf32[i + m6 * width], frameBuffer); drawRect_rgbtest(i, width, m7, buf32[i + m7 * width], frameBuffer); } usleep (10000); } return 0; }
int down(char *frameBuffer, int width, int height,int truex, u32_t * buf32) { int i = 0; int j = 0; for (j = 0; j < height; j++) { for (i = 0; i < width; i++) { drawRect_rgbtest (i, width, j,truex, buf32[j * width + i], frameBuffer); } usleep (1500); } }
int main(int argc, char **argv) { unsigned int width = 0, height = 0, size = 0; float rate = 0.0; int ret = get_JPEG_info(argv[1], &width, &height, &size, &rate); //得到图片的大小长度宽度等属性 if (ret == 0) printf("widhth*height = %u * %u; size=%u; rate=%.2f\n", width, height, size, rate); unsigned char *bffer; bffer = read_JPEG_file(argv[1]); // u32_t buf32 = read_JPEG_file(argv[1]); frameBuffer = open_fb_ioctl(argv[2],&vinfo,&finfo); //打开/dev/fbx,并得到fb的属性vinfo,finfo,然后mmap到内存,返回内存的首地址 printf("x = %d y = %d\n",vinfo.xres,vinfo.yres); if(width != vinfo.xres || height != vinfo.yres) { printf("photo is worrg\n"); return 2; } printf("photo is ok\n"); fb_info jpeg_inf; jpeg_inf.w = width; jpeg_inf.h = height; u32_t *buf32; u16_t *buf16; printf("%d\n",vinfo.bits_per_pixel); switch(vinfo.bits_per_pixel){ case 32: buf32 = rgb24to32((u8_t *)bffer,jpeg_inf); printf("24 to 32\n"); break; case 24: // u24_t *buf = (u24_t *)buffer; printf("24 to 24\n"); break; case 16: // u16_t *buf = rgb24to16((u8_t *)buffer,jpeg_inf); printf("24 to 16\n"); break; default: printf("worrg /dev/fb.bits_per_pixel\n"); return 1; } // 随机产生特效 srand((unsigned)time(NULL)); switch(rand()%3) { case 0: down_sector(frameBuffer, width, height, buf32); break; case 1: left(frameBuffer, width, height, buf32); break; case 2: down(frameBuffer, width, height, buf32); break; } #if 0 //根据不同的显卡色位转换图片色位 int i = 0; int j = 0; for(j = 0;j < height;j ++) { for(i = 0; i < width; i++) { drawRect_rgbtest(i,width,j,buf32[j*width+i],frameBuffer); } usleep(5000); } //循环打印到屏幕 // int k = 0; // int i; // int j; // for(i = 0; i < width; i = i + 256) // { // for(j = 0;j < height;j++) // { // for(k = i; k < i + 256; k++) // { // drawRect_rgbtest(k,width,j,height,buf32[j*width+k],frameBuffer); // } // } // usleep(100000); // } sleep(10); #endif return 0; }