Android에서 Augmented Reality 프로젝트를 진행 중입니다. 코드는 카메라 비디오를 캡처하고 마커를 찾고 그 위에 큐브를 표시합니다. 이 후 모션 벡터 (x 및 y 방향으로 움직이는 픽셀의 형태로)가 발견됩니다. 내가해야할 일은 GL 레이어의 픽셀을 읽고 움직임 벡터로 지정된 거리만큼 움직여서 다시 그려줍니다. GL 레이어는 투명 레이어 인 GLSurfaceView 클래스를 사용하여 지정됩니다. 내가 직면 한 문제는 glReadPixels()를 사용하여 픽셀을 읽고이를 480x800 배열 (넥서스 한 화면 해상도)로 변환 할 때 큐브의 3 가지 부분을 하나가 아닌 다른 부분으로 가져옵니다. 이후에 모션 벡터로 픽셀을 이동하고 glDrawPixels()를 사용하여 픽셀을 프레임 버퍼에 다시 넣으려고합니다. 동일한 해석으로 도와주세요. glReadPixels를 사용할 때 누락 된 것이 있습니까? 또한 동일한 기능을 수행하는 데 도움이되는 다른 기능이있는 경우 glBlitFrameBuffer()를 사용하려고 생각했지만 안드로이드 GL10 클래스에서는 지원하지 않습니다. 나는 픽셀을 읽고있는 곳의 코드 부분을 붙이고 MatLab을 사용하여 재구성 한 픽셀의 이미지와 함께 2D 매트릭스로 변경했습니다. 죄송 이미지를 게시 할 수 없습니다. 누군가가 이미지를 본 후에 나를 도울 수 있으니, 여기에 게시하고 사진을 우편으로 보내주십시오. 엄청 고마워 !!!glReadPixels() 프레임을 재구성하기 위해 Android에서 발생하는 문제
도움이 될 것입니다.
gl.glPixelStorei(GL10.GL_PACK_ALIGNMENT, 1);
IntBuffer pixels = IntBuffer.allocate(384000);
gl.glReadPixels(0, 0, 800, 480, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE ,pixels);
File f = new File ("./mnt/sdcard/Sahiba_PixelData_" + flag + ".txt");
if(!f.exists())
f.createNewFile();
FileWriter fw = new FileWriter(f);
int pixelsArr [][] = new int [480][800];
//int temp[] = pixels.array();
int n=0;
for(int i=0; i<480; i++){
for(int j=0; j<800; j++){
pixelsArr[i][j] = pixels.get(n);
//temp[n + pixels.arrayOffset()];
fw.write(pixelsArr[i][j] + " ");
//fw.write(pixels.get(n) + " ");
n++;
}
//fw.write("\n");
}
Log.i("GLLayer", "Pixels reading and storing finished !!!");
}catch(Exception e){
Log.i("GLLayer","Exception = " +e);
}
신속한 회신과 Viewport에 대한 지식에 감사드립니다. 나는 치수를 얻기 위해 그것을 사용할 것이다. – Sahiba
신속한 회신과 Viewport에 대한 지식에 감사드립니다. 나는 치수를 얻기 위해 그것을 사용할 것이다. glPixelStorei 함수에 관해서는이 정보를 온라인에서 찾았습니다 : * GL_PACK_ALIGNMENT 메모리의 각 픽셀 행의 시작에 대한 정렬 요구 사항을 지정합니다. 허용되는 값은 1 (바이트 정렬), 2 (짝수 바이트에 정렬 된 행), 4 (단어 맞춤) 및 8 (더블 워드 경계에서 시작하는 행)입니다. 초기 값은 4입니다. * 바이트 데이터를 저장하기 위해이 값을 사용하면 param 값을 1로 사용해야합니다. 내가 틀렸다면 나를 바로 잡아라. – Sahiba
이미지 크기가 800x480 인 이미지를 얻으려는 경우 800 행 480 열 또는 그 반대로 표시된다는 의미입니까? Google Nexus의 사양에 따르면 디스플레이 크기는 480x800 픽셀로 480 행과 800 열로 해석되므로 왼쪽 하단에서 시작하여 이미지를 저장합니다 (예 : 행 480, 열 1에서 열 800까지). 그런 다음 행 479)이 해석이 맞습니까? * 고마워요 * – Sahiba