C中unsigned char 就是byte.把错误信息贴出来看看,看这个看不出什么问题。错误信息logcat里面可以看到。我估计是找不到库,加载库失败这类的错误

解决方案 »

  1.   

    你确保高和宽都是4或8的整数倍吗?改成+7)/8或+3)/4试一下
    w*h*depth 求的是整个屏幕有多少位
    /8 是求的一个屏幕的字节数, /4我其实也不知道怎么回事,就是原文这么写,我也这么写。
      

  2.   


    能加载到库,这个我十分肯定,随意我能断定是库里边的函数出现问题。logcat里边没有任何报错信息,而且肯定就是这段代码出现了问题。不能成功都取或者返回数据。导致程序终止。郁闷的是它不报错。c语言能力太差,研究了一天怎么也不知道如何把数据以byte数组的形式传给java
      

  3.   

    JNIEXPORT jbyteArray Java_com_xyy_ndk_HelloAndroidNDK_SendPicThread_1ScreenShot
                                                     (JNIEnv* env,jobject thiz )
    {             
         int fd;
           fd = open("/dev/graphics/fb0", O_RDWR);  
        if(fd < 0) {
            perror("cannot open fb0");
        }
        if(ioctl(fd, FBIOGET_FSCREENINFO, &fi) < 0) {
            perror("failed to get fb0 info"); 
        }
        if(ioctl(fd, FBIOGET_VSCREENINFO, &vi) < 0) {
            perror("failed to get fb0 info");
        }
        bits = mmap(0, 48000, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
        if(bits == MAP_FAILED) {
            perror("failed to mmap framebuffer");
        }
         
                    int w = vi.xres;
                    int h = vi.yres;
                    int depth = vi.bits_per_pixel; //每一象素的bit数
      long int _ScreenSize=w*h*depth/8;//计算屏幕的总字节数(字节)

                    long int _size=_ScreenSize/4;
                    jbyteArray test=(*env)->NewByteArray(env,_size);                unsigned char a[_size];
                    memcpy(a,bits,_size);
                    (*env)->SetByteArrayRegion(env,test,0,_size, a);
                    munmap(bits, _ScreenSize);

                    close(_fb);
                    return test;
     
    }有米有接触过android手机抓屏技术的高手啊求指点。现在这段代码可以返回数据,但是返回的全是-1,形成的图片也是黑的。。真黑啊。。这是为什么啊。我代码究竟错在那里啊。。大神们帮我看一下把。。我快支持不了了,。。
      

  4.   

    楼主解决了没啊,分享下经验不,我连fbo都还打不开,求赐教,不胜感激
    [email protected]
      

  5.   

    楼主,Android手机抓屏解决了吗?求分享、求赐教。
    [email protected]