Android ndk 使用libpng加载图像会产生意外的像素数据

Android ndk 使用libpng加载图像会产生意外的像素数据,android-ndk,libpng,Android Ndk,Libpng,我在尝试将png文件加载到我的应用程序时遇到问题。它似乎可以很好地加载标题,并识别出图像是png,但由于某种原因,输出具有相同的值,尽管图像实际上不是一种颜色。另一件让我头疼的事是16个字节没有读 我的代码: AAsset*pngAsset=0; AAssetManager*pngAassetManager=0; 无效png\u资产\u读取(png\u结构png、png\u字节数据、png\u大小\u t大小){ //AAsset_seek(pngAsset_,0,0); AASET_读取(pn

我在尝试将png文件加载到我的应用程序时遇到问题。它似乎可以很好地加载标题,并识别出图像是png,但由于某种原因,输出具有相同的值,尽管图像实际上不是一种颜色。另一件让我头疼的事是16个字节没有读

我的代码:

AAsset*pngAsset=0;
AAssetManager*pngAassetManager=0;
无效png\u资产\u读取(png\u结构png、png\u字节数据、png\u大小\u t大小){
//AAsset_seek(pngAsset_,0,0);
AASET_读取(pngAsset_、数据、大小);
int NUMBYTESREMAING=AAsset_getRemainingLength(pngAsset_uu);
LOGI(“读取大小:%d,剩余:%d”,大小,数量保留);
}
图像*loadPngFile(AAssetManager*assetManager){
pngAassetManager=资产管理者;
LOGI(“尝试加载图像…”);
int HEADER_SIZE=8;
字符串filename=“skybox.png”;
pngAsset_uu=AAssetManager_u打开(pngAassetManager_u,filename.c_str(),
AASSET_模式_未知);
if(pngAsset_==0){
LOGW(“未找到资产\%s\”,filename.c_str();
返回0;
}
off\u t bufferSize=AAsset\u getLength(pngAsset);
png_字节*缓冲区=新的png_字节[标题大小];
int numBytesRead=AAsset\u read(pngAsset\u、缓冲区、标题大小);
int NUMBYTESREMAING=AAsset_getRemainingLength(pngAsset_uu);
int是png=!png\u sig\u cmp(缓冲区,0,8);
如果(!is_png){
LOGE(“文件%s格式不是PNG。”,filename.c_str());
返回0;
}
LOGI(“文件大小:%d,读取字节:%d,剩余字节:%d”,
缓冲区大小,numbytes读取,numbytes保留);
png_structp png_ptr=png_create_read_struct(png_LIBPNG_VER_STRING,NULL,
空,空);
如果(!png_ptr){
LOGE(“无法创建PNG结构:%s”,filename.c_str());
返回0;
}
png_infop info_ptr=png_create_info_struct(png_ptr);
如果(!info_ptr){
png_destroy_read_struct(&png_ptr,(png_infopp)NULL,(png_infopp)NULL);
LOGE(“无法创建png信息:%s”,filename.c_str());
返回0;
}
png_infop end_info=png_create_info_struct(png_ptr);
如果(!end_info){
png_destroy_read_struct(&png_ptr,&info_ptr,(png_infopp)NULL);
LOGE(“无法创建png结束信息:%s”,filename.c_str());
返回0;
}
if(setjmp(png_jmpbuf(png_ptr))){
LOGE(“setjmp时出错:%s”,filename.c_str());
png_destroy_read_struct(&png_ptr,&info_ptr,&end_info);
返回0;
}
png\u set\u read\u fn(png\u ptr,NULL,png\u asset\u read);
png_set_sig_字节(png_ptr,8);
png_read_info(png_ptr,info_ptr);
int位深度、颜色类型;
巴布亚新几内亚32倍,右侧;
png_获取IHDR(png_ptr、info_ptr、twidth、thight、bit_depth和color_type、,
空,空,空);
LOGI(“宽度:%d,高度:%d.”,宽度,宽度);
//更新png信息结构。
png_读取_更新_信息(png_ptr,info_ptr);
//行大小(字节)。
int rowbytes=png_get_rowbytes(png_ptr,info_ptr);
LOGI(“行大小:%d字节。”,行字节);
//将图像数据作为一个大块分配给opengl
png_字节*图像_数据=新的png_字节[行字节*右侧];
如果(!图像_数据){
//清理内存并关闭文件
png_destroy_read_struct(&png_ptr,&info_ptr,&end_info);
洛格(
“加载%s时无法分配图像数据”,filename.c_str();
}
//行指针用于指向图像数据,以便使用libpng读取png
png_bytep*行指针=新的png_bytep[theight];
如果(!行指针){
//清理内存并关闭文件
png_destroy_read_struct(&png_ptr,&info_ptr,&end_info);
删除[]图像数据;
洛格(
“加载%s时无法分配行指针”,filename.c_str());
}
//将单个行指针设置为指向图像数据的正确偏移
对于(int i=0;i
输出:

06-30 23:49:00.651: I/Ghost Engine(21279): Trying to load image...
06-30 23:49:00.651: I/Ghost Engine(21279): Size of the file: 529452, bytes read: 8, bytes remain: 529444
06-30 23:49:00.651: I/Ghost Engine(21279): Read size: 8, remaining: 529436
06-30 23:49:00.651: I/Ghost Engine(21279): Read size: 13, remaining: 529423
06-30 23:49:00.651: I/Ghost Engine(21279): Read size: 4, remaining: 529419
06-30 23:49:00.651: I/Ghost Engine(21279): Read size: 8, remaining: 529411
06-30 23:49:00.651: I/Ghost Engine(21279): Read size: 9, remaining: 529402
06-30 23:49:00.651: I/Ghost Engine(21279): Read size: 4, remaining: 529398
06-30 23:49:00.651: I/Ghost Engine(21279): Read size: 8, remaining: 529390
06-30 23:49:00.651: I/Ghost Engine(21279): Read size: 32, remaining: 529358
06-30 23:49:00.651: I/Ghost Engine(21279): Read size: 4, remaining: 529354
06-30 23:49:00.651: I/Ghost Engine(21279): Read size: 8, remaining: 529346
06-30 23:49:00.651: I/Ghost Engine(21279): Width: 1024, height: 1024.
06-30 23:49:00.651: I/Ghost Engine(21279): Row size: 4096 bytes.
06-30 23:49:00.651: I/Ghost Engine(21279): Read size: 8192, remaining: 521154
06-30 23:49:00.681: I/Ghost Engine(21279): Read size: 8192, remaining: 512962
06-30 23:49:00.681: I/Ghost Engine(21279): Read size: 8192, remaining: 504770
06-30 23:49:00.691: I/Ghost Engine(21279): Read size: 8192, remaining: 496578
06-30 23:49:00.701: I/Ghost Engine(21279): Read size: 8192, remaining: 488386
06-30 23:49:00.721: I/Ghost Engine(21279): Read size: 8192, remaining: 480194
06-30 23:49:00.721: I/Ghost Engine(21279): Read size: 8192, remaining: 472002
06-30 23:49:00.731: I/Ghost Engine(21279): Read size: 8192, remaining: 463810
06-30 23:49:00.731: I/Ghost Engine(21279): Read size: 8192, remaining: 455618
06-30 23:49:00.731: I/Ghost Engine(21279): Read size: 8192, remaining: 447426
06-30 23:49:00.741: I/Ghost Engine(21279): Read size: 8192, remaining: 439234
06-30 23:49:00.741: I/Ghost Engine(21279): Read size: 8192, remaining: 431042
06-30 23:49:00.741: I/Ghost Engine(21279): Read size: 8192, remaining: 422850
06-30 23:49:00.741: I/Ghost Engine(21279): Read size: 8192, remaining: 414658
06-30 23:49:00.741: I/Ghost Engine(21279): Read size: 8192, remaining: 406466
06-30 23:49:00.741: I/Ghost Engine(21279): Read size: 8192, remaining: 398274
06-30 23:49:00.751: I/Ghost Engine(21279): Read size: 8192, remaining: 390082
06-30 23:49:00.751: I/Ghost Engine(21279): Read size: 8192, remaining: 381890
06-30 23:49:00.751: I/Ghost Engine(21279): Read size: 8192, remaining: 373698
06-30 23:49:00.751: I/Ghost Engine(21279): Read size: 8192, remaining: 365506
06-30 23:49:00.751: I/Ghost Engine(21279): Read size: 8192, remaining: 357314
06-30 23:49:00.751: I/Ghost Engine(21279): Read size: 8192, remaining: 349122
06-30 23:49:00.761: I/Ghost Engine(21279): Read size: 8192, remaining: 340930
06-30 23:49:00.761: I/Ghost Engine(21279): Read size: 8192, remaining: 332738
06-30 23:49:00.761: I/Ghost Engine(21279): Read size: 8192, remaining: 324546
06-30 23:49:00.761: I/Ghost Engine(21279): Read size: 8192, remaining: 316354
06-30 23:49:00.761: I/Ghost Engine(21279): Read size: 8192, remaining: 308162
06-30 23:49:00.761: I/Ghost Engine(21279): Read size: 8192, remaining: 299970
06-30 23:49:00.761: I/Ghost Engine(21279): Read size: 8192, remaining: 291778
06-30 23:49:00.771: I/Ghost Engine(21279): Read size: 8192, remaining: 283586
06-30 23:49:00.771: I/Ghost Engine(21279): Read size: 8192, remaining: 275394
06-30 23:49:00.771: I/Ghost Engine(21279): Read size: 8192, remaining: 267202
06-30 23:49:00.771: I/Ghost Engine(21279): Read size: 8192, remaining: 259010
06-30 23:49:00.771: I/Ghost Engine(21279): Read size: 8192, remaining: 250818
06-30 23:49:00.771: I/Ghost Engine(21279): Read size: 8192, remaining: 242626
06-30 23:49:00.781: I/Ghost Engine(21279): Read size: 8192, remaining: 234434
06-30 23:49:00.781: I/Ghost Engine(21279): Read size: 8192, remaining: 226242
06-30 23:49:00.781: I/Ghost Engine(21279): Read size: 8192, remaining: 218050
06-30 23:49:00.781: I/Ghost Engine(21279): Read size: 8192, remaining: 209858
06-30 23:49:00.781: I/Ghost Engine(21279): Read size: 8192, remaining: 201666
06-30 23:49:00.781: I/Ghost Engine(21279): Read size: 8192, remaining: 193474
06-30 23:49:00.781: I/Ghost Engine(21279): Read size: 8192, remaining: 185282
06-30 23:49:00.791: I/Ghost Engine(21279): Read size: 8192, remaining: 177090
06-30 23:49:00.791: I/Ghost Engine(21279): Read size: 8192, remaining: 168898
06-30 23:49:00.791: I/Ghost Engine(21279): Read size: 8192, remaining: 160706
06-30 23:49:00.791: I/Ghost Engine(21279): Read size: 8192, remaining: 152514
06-30 23:49:00.791: I/Ghost Engine(21279): Read size: 8192, remaining: 144322
06-30 23:49:00.791: I/Ghost Engine(21279): Read size: 8192, remaining: 136130
06-30 23:49:00.801: I/Ghost Engine(21279): Read size: 8192, remaining: 127938
06-30 23:49:00.801: I/Ghost Engine(21279): Read size: 8192, remaining: 119746
06-30 23:49:00.801: I/Ghost Engine(21279): Read size: 8192, remaining: 111554
06-30 23:49:00.801: I/Ghost Engine(21279): Read size: 8192, remaining: 103362
06-30 23:49:00.801: I/Ghost Engine(21279): Read size: 8192, remaining: 95170
06-30 23:49:00.811: I/Ghost Engine(21279): Read size: 8192, remaining: 86978
06-30 23:49:00.811: I/Ghost Engine(21279): Read size: 8192, remaining: 78786
06-30 23:49:00.811: I/Ghost Engine(21279): Read size: 8192, remaining: 70594
06-30 23:49:00.821: I/Ghost Engine(21279): Read size: 8192, remaining: 62402
06-30 23:49:00.821: I/Ghost Engine(21279): Read size: 8192, remaining: 54210
06-30 23:49:00.831: I/Ghost Engine(21279): Read size: 8192, remaining: 46018
06-30 23:49:00.831: I/Ghost Engine(21279): Read size: 8192, remaining: 37826
06-30 23:49:00.831: I/Ghost Engine(21279): Read size: 8192, remaining: 29634
06-30 23:49:00.841: I/Ghost Engine(21279): Read size: 8192, remaining: 21442
06-30 23:49:00.841: I/Ghost Engine(21279): Read size: 8192, remaining: 13250
06-30 23:49:00.841: I/Ghost Engine(21279): Read size: 8192, remaining: 5058
06-30 23:49:00.851: I/Ghost Engine(21279): Read size: 5042, remaining: 16
06-30 23:49:00.861: I/Ghost Engine(21279): Pixel 0: 0.000000 0.000000 1197.166992 1420.242434
06-30 23:49:00.861: I/Ghost Engine(21279): Pixel 1: 0.000000 0.000000 1197.166992 1420.242434
06-30 23:49:00.861: I/Ghost Engine(21279): Pixel 2: 0.000000 0.000000 1197.166992 1420.242434
06-30 23:49:00.861: I/Ghost Engine(21279): Pixel 3: 0.000000 0.000000 1197.166992 1420.242434
06-30 23:49:00.861: I/Ghost Engine(21279): Pixel 4: 0.000000 0.000000 1197.166992 1420.242434
06-30 23:49:00.861: I/Ghost Engine(21279): Pixel 5: 0.000000 0.000000 1197.166992 1420.242434
06-30 23:49:00.861: I/Ghost Engine(21279): Pixel 6: 0.000000 0.000000 1197.166992 1420.242434
06-30 23:49:00.861: I/Ghost Engine(21279): Pixel 7: 0.000000 0.000000 1197.166992 1420.242434
06-30 23:49:00.861: I/Ghost Engine(21279): Pixel 8: 0.000000 0.000000 1197.166992 1420.242434
06-30 23:49:00.861: I/Ghost Engine(21279): Pixel 9: 0.000000 0.000000 1197.166992 1420.242434
06-30 23:49:00.871: I/Ghost Engine(21279): Image id: 1.
06-30 23:49:00.871: I/Ghost Engine(21279): Image dimensions: 1024 x 1024
06-30 23:49:00.871: I/Ghost Engine(21279): Image size: 4194304
有什么想法会让一切都开始出错吗? 谢谢,Martin。

发现问题:

"Pixel %d: %f %f %f %f"
应该是:

"Pixel %d: %d %d %d %d"
显然,图像加载良好