各位大虾
图片的数据通过jni用c语言读取,想把数据返回到android的java层,然后再把图片正常显示出来。应该怎么样处理数据?应该有一个什么过程?c语言的fopen函数是读txt文件的 有没有读取图片的函数。这个 没有思路。有没有 一个小程序实例??
感谢各位 能够帮助下android图片
图片的数据通过jni用c语言读取,想把数据返回到android的java层,然后再把图片正常显示出来。应该怎么样处理数据?应该有一个什么过程?c语言的fopen函数是读txt文件的 有没有读取图片的函数。这个 没有思路。有没有 一个小程序实例??
感谢各位 能够帮助下android图片
解决方案 »
- 请问怎样在Service中实现手机的后台拍照功能
- GCM替代方案有哪些?
- 有人使用华为网盘云存储api接口吗?
- 为啥新建一个android application,刚新建,运行,怎么以前的android的程序也显示了出来?
- 三星盖世s5660 求助!
- 请教Android播放流媒体的时候,若通过的WCDMA网络其是如何实现解析WCDMA协议栈的???
- 如何去掉Android的开机LOGO(即android小动画字样),是去掉不显示,不是修改。
- 如何清除handler消息
- 关于android游戏开发、jbox2d、cocos2dx???????????????????????????????????????????????????
- 在使用glide的时候 设置高斯模糊效果时候报了下面的错
- android 闹钟
- 急!急!急!求大神们指点如果在android平台下开启jbox2d的debugDraw功能
然后再把读取的数据转换成图片的rgba
读取PNG文件步骤1.移植libpng库
网上有教程,不会找我……2.读取图片数据
以下为asset内图片的读取
读程序数据空间或SD卡内的图片直接 FILE *fp.... 就行了
#include <android/asset_manager.h>png_byte *mImageData;
png_uint_32 mW,mH;void mLoadPNGFile(char *pFileName)
{
off_t start,length; png_byte pSig[8];
png_structp png_ptr;
png_infop info_ptr;
AAsset *asset=AAssetManager_open(gEngine.mApp->activity->assetManager,pFileName,AASSET_MODE_UNKNOWN);
//这里需要从java端传入assetManager,我用的是纯c++ activity,所以不需要
if(!asset)
{
return;
} int fd=AAsset_openFileDescriptor(asset,&start,&length);
if(fd<0)
return;
FILE *file=fdopen(fd,"rb");
fseek(file,start,SEEK_SET);
fread(pSig,sizeof(*pSig),8,file); if(!png_check_sig(pSig,8))
{
LOGI("The file \"%s\" isn't a PNG file",pFileName);
fclose(file);
AAsset_close(asset);
return;
}
if((png_ptr=png_create_read_struct(PNG_LIBPNG_VER_STRING,NULL,NULL,NULL))==NULL)
{
fclose(file);
AAsset_close(asset);
return;
}
if((info_ptr=png_create_info_struct(png_ptr))==NULL)
{
png_destroy_read_struct(&png_ptr,NULL,NULL);
fclose(file);
AAsset_close(asset);
return;
}
if(setjmp(png_jmpbuf(png_ptr)))
{
png_destroy_read_struct(&png_ptr,&info_ptr,NULL);
fclose(file);
AAsset_close(asset);
return;
} png_init_io(png_ptr,file);
png_set_sig_bytes(png_ptr,8); int bit_depth,color_type;
png_read_info(png_ptr,info_ptr);
png_get_IHDR(png_ptr,info_ptr,&mW,&mH,&bit_depth,&color_type,NULL,NULL,NULL); int size=mH*mW*4;
unsigned int rowbytes=png_get_rowbytes(png_ptr,info_ptr); mImageData=new unsigned char[size];
if(!mImageData)
{
png_destroy_read_struct(&png_ptr,&info_ptr,NULL);
fclose(file);
AAsset_close(asset);
return;
} png_bytepp row_pointers=new png_bytep[mH];
if(!row_pointers)
{
delete[] mImageData;
png_destroy_read_struct(&png_ptr,&info_ptr,NULL);
fclose(file);
AAsset_close(asset);
return;
} for(png_uint_32 i=0;i<mH;i++)
row_pointers[mH-1-i]=mImageData+i*rowbytes;
png_read_image(png_ptr,row_pointers); delete[] row_pointers;
png_destroy_read_struct(&png_ptr,&info_ptr,NULL);
fclose(file);
AAsset_close(asset);}