我正在使用Android NDK製作繪製圖像的簡單應用程序。我使用Android 6.0在我的HTC M8手機上運行應用程序。我使用stb_image庫(https://github.com/nothings/stb),它使用fopen來讀取圖像。當我試圖在我的硬盤驅動器(它位於「D:/Lighthouse.jpg」)中加載圖像時,我得到了錯誤,因爲它無法用fopen打開它,我確信我的圖像的路徑是正確的。 我的代碼在Visual Studio中正常工作,但不在Android中。我究竟做錯了什麼?如何在Android NDK的硬盤中讀取圖像?
更新:我搜索了四周,並將以下權限添加到我的AndroidManifest.xml中,但它仍然不起作用。
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
錯誤日誌:
I/libgl2jni: Failed to load image: can't fopen
I/libgl2jni: Width = = 1865550320
I/libgl2jni: Height = = 1873207072
W/Adreno-ES20: <core_glTexImage2D:501>: GL_INVALID_VALUE
我的圖像渲染,使用fopen的調用函數加載圖片類:
void generateTexture()
{
glGenTextures(1 , &mTexture);
glBindTexture(GL_TEXTURE_2D, mTexture);// Bind our 2D texture so that following set up will be applied
//Set texture wrapping parameter
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_MIRRORED_REPEAT);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_MIRRORED_REPEAT);
//Set texture Filtering parameter
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
//Load the image. This works fine in Visual Studio but not in Android Studio
int picWidth,picHeight,n;
unsigned char* image = stbi_load("D:/Lighthouse.jpg", &picWidth, &picHeight, &n,0);
if (image == NULL) {
LOGI("Failed to load image: %s", stbi_failure_reason());
}
LOGI("Width = = %d\n",
picWidth);
LOGI("Height = = %d\n",
picHeight);
//Generate the image
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB , picWidth , picHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, image);
glGenerateMipmap(GL_TEXTURE_2D);
stbi_image_free(image);// Free the reference to the image
glBindTexture(GL_TEXTURE_2D,0); //Unbind 2D textures
}
你在模擬器中試試嗎? – yakobom
抱歉,忘記提供這些信息。我在HTC M8手機上運行它。 –
所以我不明白 - 你怎麼能訪問「D:/Lighthouse.jpg」?驅動器連接時,設備上是否存在此路徑? – yakobom