我在java读取一张图片,转成byte[]传给了C++,然后用这个图片数据做为纹理,可显示的结果为乱纹,大家帮忙看一下:JAVA 中图片处理/////tnImg是自己写的一类对象,可以对图片进行处进
int bitmapWidth = tnImg.getWidth();
int bitmapHeight = tnImg.getHeight();int[] argbData = new int[bitmapWidth * bitmapHeight];
tnImg.getARGB(argbData, 0, bitmapWidth, 0, 0, bitmapWidth, bitmapHeight);//把图片的数据存入argbDatabyte[] imageData = new byte[argbData.length * 4];
 //下面把数据换成byte数据,按rgba的顺序,并把相素上下互换。 
for (int i = bitmapHeight - 1; i >= 0; i--)
{
  for (int j = 0; j < bitmapWidth; j++)
  {
    int srcPixelIndex = bitmapWidth * (bitmapHeight - 1 - i) + j;
    int destPixelIndex = bitmapWidth * i + j;
    imageData[4 * destPixelIndex + 2] = (byte) ((argbData[srcPixelIndex] & 0xFF) >> 0);
    imageData[4 * destPixelIndex + 1] = (byte) ((argbData[srcPixelIndex] & 0xFF00) >> 8);
    imageData[4 * destPixelIndex + 0] = (byte) ((argbData[srcPixelIndex] & 0xFF0000) >> 16);
    imageData[4 * destPixelIndex + 3] = (byte) ((argbData[srcPixelIndex] & 0xFF000000) >> 24);
   }
 }
 return imageData; //这个数组传给C++
C++代码:#define one 1.0f
typedef unsigned char byte;
float rotateQuad;
GLuint  texture[1];
void *bitmapData;static GLfloat buffer[12] = {
one,one,0,
-one,one,0,
one,-one,0,
-one,-one,0,
};
static GLfloat texCoords[8] = {
0,0,0,one,one,0,one,one,
};
void Java_com_ldj_hellondk_NdkGLRenderer_onNdkSurfaceCreated (JNIEnv* env, jobject obj)
{
    // 启用阴影平滑
    glShadeModel(GL_SMOOTH);    // 黑色背景
    glClearColor(0, 0, 0, 0);    // 设置深度缓存
    glClearDepthf(1.0f);
    // 启用深度测试
    glEnable(GL_DEPTH_TEST);
    // 所作深度测试的类型
    glDepthFunc(GL_LEQUAL);    // 告诉系统对透视进行修正
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);

    //允许2D贴图,纹理
    glEnable(GL_TEXTURE_2D);

    //IntBuffer intBuffer = IntBuffer.allocate(1);
    // 创建纹理
    glGenTextures(1, &texture[0]);
    //glGenTextures(1, intBuffer);
    //texture = intBuffer.get();
    // 设置要使用的纹理
    //glBindTexture(GL10.GL_TEXTURE_2D, texture);

    //纹理绑定
    glBindTexture(GL_TEXTURE_2D, texture[0]);

    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 179, 176, 0, GL_RGBA, GL_UNSIGNED_BYTE, bitmapData);
    // 线形滤波
    glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    
}void Java_com_ldj_hellondk_NdkGLRenderer_onNdkSurfaceChanged (JNIEnv* env, jobject obj, jint width, jint height)
{
    //图形最终显示到屏幕的区域的位置、长和宽
    glViewport (0,0,width,height);
    //指定矩阵
    glMatrixMode   (GL_PROJECTION);
    //将当前的矩阵设置为glMatrixMode指定的矩阵
    glLoadIdentity ();
    glOrthof       (-2, 2, -2, 2, -2, 2);
}
 void Java_com_ldj_hellondk_NdkGLRenderer_onNdkDrawFrame (JNIEnv* env, jobject obj)
{
   
    //启用顶点设置功能,之后必须要关闭功能
    glEnableClientState (GL_VERTEX_ARRAY);
    glEnableClientState (GL_COLOR_ARRAY);
    //清屏
    glClearColor (0,0,1,1);
    glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    glMatrixMode (GL_MODELVIEW);
    glLoadIdentity (); 

    glBindTexture(GL_TEXTURE_2D, texture[0]);///
    glEnableClientState(GL_TEXTURE_COORD_ARRAY);
    glTexCoordPointer(2, GL_FIXED, 0, texCoords);    glFrontFace(GL_CW);
    glRotatef(rotateQuad, 1.0f, 0.0f, 0.0f);
    glVertexPointer(3, GL_FLOAT, 0, buffer);

    //glColorPointer(4, GL_FLOAT, 0 , colors);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

    //glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_BYTE, indices);
    //关闭顶点设置功能
    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState (GL_COLOR_ARRAY);
 
}void Java_com_ldj_hellondk_NdkGLRenderer_setBitmap (JNIEnv* env, jobject obj, jbyteArray bytes)
{
jbyte* buffer = env->GetByteArrayElements(bytes,0);
bitmapData = buffer;
}