//------------------------------------------------------------------- JNIEXPORT jint JNICALL Java_com_example_demo_record_ScreenShotService_getPicFromFrameBuffer (JNIEnv * env, jobject thiz, jint width, jint height, jint bit, jint filename){ LOGI("---进入到屏幕截图本地调用函数!---"); fb_create(); char cfilename[512]; sprintf(cfilename, "/sdcard/luzhi/%d.bmp", filename); int i = 0; if(bit == 0) { i = save_bmp(cfilename, width, height, g_fb.bits, g_fb.vi.bits_per_pixel); } else { i = save_bmp(cfilename, width, height, g_fb.bits, bit); } fb_destory(&g_fb); //(*env)->ReleaseStringUTFChars(filename, cfilename); if(i == 0) { LOGI("---生成文件失败!---"); return -1; } LOGI("---生成文件成功!---"); return 0; }
int screen_shot(const char * path) { struct FB * fb = NULL; fb = fb_create(1); if (fb) { save_bmp(path, fb_width(fb), fb_height(fb), fb_bits(fb), fb_bpp(fb)); fb_destory(fb); } return 0; }
static errno_t attach_pod_framebuf() { struct fb_info *info; info = fb_create(&openpod_ops, mmap_base, mmap_len); if (info == NULL) { return EFAULT; } return 0; }
static int file_to_fb(const char * srcpath) { int ret = -1; BMP_READ * bmp = NULL; struct FB * fb = NULL; int sw, sh; int srcbpp, dstbpp; void * pdata = NULL, * bmpdata = NULL; RGB_CONVERT_FUN convert_func = NULL; do { bmp = bmp_open(srcpath); if (!bmp) { break; } fb = fb_create(0); if (!fb) { break; } sw = bmp_width(bmp); sh = bmp_height(bmp); bmpdata = bmp_data(bmp); srcbpp = bmp_bpp(bmp); dstbpp = fb_bpp(fb); convert_func = get_convert_func(srcbpp, dstbpp); if (convert_func) { pdata = convert_func(bmpdata, sw, sh); bmpdata = pdata; } if (!bmp_forward(bmp)) { line_reversal(bmpdata, sw, sh, dstbpp); } rgb_copy(bmpdata, fb_bits(fb), sw, sh, fb_width(fb), fb_height(fb), dstbpp); ret = 0; } while (0); fb_destory(fb); bmp_close(bmp); if (pdata) { free(pdata); } return ret; }
static int cirrus_init(struct pci_slot_dev *pci_dev) { char *mmap_base = (char *)(pci_dev->bar[0] & PCI_BASE_ADDR_IO_MASK); /* FIXME */ size_t mmap_len = 1024 * 1280 * 16 / 8; struct fb_info *info; if (MAP_FAILED == mmap_device_memory(mmap_base, mmap_len, PROT_READ|PROT_WRITE|PROT_NOCACHE, MAP_FIXED, (unsigned long) mmap_base)) { return -EIO; } info = fb_create(&cl_ops, mmap_base, mmap_len); if (info == NULL) { munmap(mmap_base, mmap_len); return -ENOMEM; } return 0; }
struct console *consoleinit(struct console *con) { int i; conregister[0]=(struct console *)malloc(sizeof(struct console)); fb_create(conregister[0]); for(i=0;i<CONSOLEMEMBER;i++) { if(conregister[i]->id==con->id) { con=conregister[i]; break; } } con->init(); return con; }
static int fb_to_file(const char * dstpath, int output_rgb) { int ret = -1; int w, h; int srcbpp, dstbpp; void * pdata = NULL, * fbdata = NULL; RGB_CONVERT_FUN convert_func = NULL; struct FB * fb = NULL; do { fb = fb_create(1); if (!fb) { break; } w = fb_width(fb); h = fb_height(fb); fbdata = fb_bits(fb); srcbpp = fb_bpp(fb); dstbpp = g_rgbbpp[output_rgb]; convert_func = get_convert_func(srcbpp, dstbpp); if (convert_func) { pdata = convert_func(fbdata, w, h); fbdata = pdata; } ret = save_bmp(dstpath, w, h, fbdata, dstbpp); } while (0); if (pdata) { free(pdata); } fb_destory(fb); return ret; }
static int bochs_init(struct pci_slot_dev *pci_dev) { char *mmap_base = (char *)(pci_dev->bar[0] & ~0xf); /* FIXME */ size_t mmap_len = binalign_bound(VBE_DISPI_MAX_XRES * VBE_DISPI_MAX_YRES * VBE_DISPI_MAX_BPP / 8, PAGE_SIZE()); struct fb_info *info; if (MAP_FAILED == mmap_device_memory(mmap_base, mmap_len, PROT_READ|PROT_WRITE|PROT_NOCACHE, MAP_FIXED, (unsigned long) mmap_base)) { return -EIO; } info = fb_create(&bochs_ops, mmap_base, mmap_len); if (info == NULL) { munmap(mmap_base, mmap_len); return -ENOMEM; } return 0; }