JNIEXPORT jint JNICALL Java_com_frame_FrameBufferTest_getFrameBuffer(JNIEnv *env, jobject thiz, jbyteArray jByte)
{
    struct fb_var_screeninfo vi;
    struct fb_fix_screeninfo fi;
    int WIDTH = 480;
    int HEIGHT = 800;
    int BYTE_PER_PIXEL = 4;
    int SCREEN_NUM = 1; // 화면 갯수
    int READ_BYTE = WIDTH * HEIGHT * BYTE_PER_PIXEL * SCREEN_NUM;
    unsigned short * pFrame=NULL;

    // open fb0
    int fp= open("/dev/graphics/fb0", O_RDONLY);
    if(fp<0)
        return errno;

    // get pointer
    pFrame=NULL;
    pFrame =  mmap(0, READ_BYTE, PROT_READ, MAP_SHARED, fp,0 );
    if( pFrame==MAP_FAILED )
    {
        close(fp);
        return errno;
    }

    // set buffer
    (*env)->SetByteArrayRegion(env, jByte, 0, READ_BYTE, (jbyte*)pFrame );
    
    munmap(pFrame,READ_BYTE);
    close(fp);
    
    return 0;
}

이게 fb0를 읽어들이는 c파일이고

 

 public class FrameBufferTest extends Activity {
 /** Called when the activity is first created. */
    ImageView frameView1, frameView2;
    Bitmap bitmap1;

    private native int getFrameBuffer(byte[] buff);

     static {
            System.loadLibrary("fbuffer");
     }
     
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);   
        Button btn;
        btn = (Button)findViewById(R.id.Button01);
        btn.setOnClickListener(new OnClickListener() {
               public void onClick(View v) {
                   switch (v.getId()) {
                     case R.id.Button01: 
                     frameView1.setImageBitmap(bitmap1);
                   break;
          }
        }
        });

        frameView1 = (ImageView) findViewById(R.id.FrameImageView1);

        // get frame buffer
        int WIDTH = 480;
        int HEIGHT = 800;
        int BYTE_PER_PIXEL = 4;
        int SCREEN_NUM = 1; // 화면 갯수
        int size = WIDTH * HEIGHT * BYTE_PER_PIXEL * SCREEN_NUM;
        byte[] buffer = new byte[size];

        // crate bitmap
        BitmapFactory.Options bfo = new BitmapFactory.Options();
        bfo.inPreferredConfig = Bitmap.Config.RGB_565;
        bfo.outWidth = WIDTH;
        bfo.outHeight = HEIGHT;
        
        bitmap1 = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.RGB_565);

        int ret = getFrameBuffer(buffer);
        if (ret != 0) {
            // 에러
            bitmap1.eraseColor(Color.RED);
            bitmap2.eraseColor(Color.RED);
            Log.i("ERROR : ", ""+ret);
            return;
        }
        // copy to bitmap
        ByteBuffer BB = ByteBuffer.allocate(size/SCREEN_NUM);        
        BB.put(buffer, 0, size / SCREEN_NUM);
        BB.rewind();
        bitmap1.copyPixelsFromBuffer(BB);

    }
}

이것은 java파일입니다.

 


캡쳐하고 저장하면(위 코드에서 저장하는 부분은 뺏습니다)

아래 사진처럼 나옵니다.

 

어디가 잘못된걸까요

참고 사이트는 http://blog.naver.com/lovinghc/30105147933 입니다.