2011-10-13 36 views
9

Tôi đang cố gắng để thêm một số efects để máy ảnh trong android, Tôi tìm thấy một số thứ trên internet, nhưng tôi đã bị mắc kẹt khi tạo kết cấu,int mảng kết cấu OpenGL trong android

tôi sử dụng funcion decodeYUV420SP () trả về mảng int [width * height] RGB int với giá trị hex vào mỗi vị trí mảng,

Bây giờ, tôi muốn tạo kết cấu openGL của mảng này nhưng tôi không biết làm cách nào, tôi có thể chuyển đổi từng giá trị hex để R_G_B của nó tách ra và đặt nó vào opengl nhưng nó không hoạt động Tôi làm điều gì đó như thế này:

mNewTexture = new int[width*height*4] 
    for(int i=0; i<mRGB.length; i=i+4){ 

     mNewTexture[i] = getR(mRGB[i]) ;   //R 
     mNewTexture[i+1] = getG(mRGB[i]) ;   //G 
     mNewTexture[i+2] = getB(mRGB[i]) ;   //B 
     mNewTexture[i+3] = getA(mRGB[i]);  //A 

    } 

Để chuyển đổi các giá trị hex để RGBA (0-255)

Và tôi làm điều này để chuyển nó sang kết cấu OpenGL:

 gl.glBindTexture(GL10.GL_TEXTURE_2D, tex); 
     gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, 1024, 512, 0, GL10.GL_RGBA, GL10.GL_FLOAT, FloatBuffer.wrap(mNewTexture)); 
     gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR); 

Tuy nhiên một cái gì đó là worng, nguyên nhân nó không công việc ...

Bất kỳ ý tưởng nào?

Trả lời

2

Tại sao bạn cố gắng bọc mảng int của mình dưới dạng FloatBuffer? Hầu hết các chuyển đổi của bạn là không cần thiết.

Chỉ cần lấy kết cấu ban đầu của bạn, quấn nó vào một dấu gạch ngang và chuyển nó đến glTexImage với loại GL_UNSIGNED_BYTE. Không cần phải tạo một mảng mới từ những gì bạn đã có.

gl.glTexImage2D(GL10.GL_TEXTURE_2D, 0, GL10.GL_RGBA, 1024, 512, 0, GL10.GL_RGBA, GL10.GL_UNSIGNED_BYTE, ByteBuffer.wrap(mRGB));

Các vấn đề liên quan