我正在使用Android進行增強現實項目。該代碼捕獲相機視頻,找到標記並在其上顯示立方體。在此之後,找到運動矢量(以在x和y方向上移動的像素的形式)。我需要做的是從GL層讀取像素,並在將它們移動運動矢量指定的距離後再次繪製它們。 GL層是使用GLSurfaceView類(它是透明層)指定的。我面臨的問題是,當我使用glReadPixels()讀取像素並將其轉換爲480x800陣列(nexus一個屏幕分辨率)時,我得到立方體的3個不同部分而不是1個。 我打算在此之後通過運動矢量移動像素,並使用glDrawPixels()將像素放回幀緩衝區 請幫助我解釋相同的。在使用glReadPixels的時候有什麼我不明白的地方,以及是否有其他的功能可以幫助我達到同樣的效果。我正在考慮使用glBlitFrameBuffer(),但不支持android 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);
}
感謝您的及時回覆和關於視口的知識。我會用它來獲得尺寸。 – Sahiba 2011-03-16 03:00:22
感謝您的及時回覆和關於視口的知識。我會用它來獲得尺寸。關於glPixelStorei函數,我在線找到了這些信息:* GL_PACK_ALIGNMENT 指定內存中每個像素行起始的對齊要求。允許值爲1(字節對齊),2(與偶數字節對齊的行),4(字對齊)和8(行在雙字邊界上開始)。 *初始值是4. *爲了保存字節數據,我應該使用param值作爲1對嗎?如果我錯了,請糾正我。 – Sahiba 2011-03-16 03:06:04
對於圖像大小,當你說我得到的圖像爲800x480,你的意思是有800行480列或其他方式。根據Google Nexus的規格,顯示屏尺寸爲480x800像素,我將其解釋爲480行和800列,因此將圖像從左下角開始保存(即第480行,第1列至第800列,然後轉到第479)這個解釋是否正確? *謝謝大家* – Sahiba 2011-03-16 03:11:08