我正在使用Android NDK制作一个简单的应用程序来绘制图像。我使用Android 6.0在我的HTC M8手机上运行应用程序。我使用stb_image库(https://github.com/nothings/stb),它使用fopen来读取图像。当我试图在我的硬盘中加载图像时(它位于“D:/Lighthouse.jpg”),我收到错误,因为它无法用fopen打开它,我确定我的图像的路径是正确的。 我的代码在Visual Studio中运行良好,但在Android 中运行良好。我做错了什么?
更新:我已经搜索过并将以下权限添加到我的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
}
答案 0 :(得分:1)
在您的Android设备上,您只能访问手机存储空间,无法访问PC硬盘驱动器上的文件,至少不容易。将文件放在设备存储器,USB驱动器或服务器上。