jni 从c传递map到java_如何在Android开发中使用JNI将位图从Java传递到C?

我想使用JNI for Android Development将位图从Android传递到C.

在Java中,我调用此函数将位图从Java发送到C:

public native int sendMyBitmap(Bitmap bitmap);

在JNI中,我这样做了:

JNIEXPORT void JNICALL sendMyBitmap(JNIEnv * env,

jobject obj, jobject bitmap)

{

AndroidBitmapInfo androidBitmapInfo ;

void* pixels;

AndroidBitmap_getInfo(env, bitmap, &androidBitmapInfo);

AndroidBitmap_lockPixels(env, bitmap, &pixels);

unsigned char* pixelsChar = (unsigned char*) pixels;

saveImage(pixelsChar);

}

void saveImage(unsigned char* img)

{

FILE *f;

int w = 640, h = 480;

int filesize = 54 + 3*w*h; //w is your image width, h is image height, both int

unsigned char bmpfileheader[14] = {'B','M', 0,0,0,0, 0,0, 0,0, 54,0,0,0};

unsigned char bmpinfoheader[40] = {40,0,0,0, 0,0,0,0, 0,0,0,0, 1,0, 24,0};

unsigned char bmppad[3] = {0,0,0};

bmpfileheader[ 2] = (unsigned char)(filesize );

bmpfileheader[ 3] = (unsigned char)(filesize>> 8);

bmpfileheader[ 4] = (unsigned char)(filesize>>16);

bmpfileheader[ 5] = (unsigned char)(filesize>>24);

bmpinfoheader[ 4] = (unsigned char)( w );

bmpinfoheader[ 5] = (unsigned char)( w>> 8);

bmpinfoheader[ 6] = (unsigned char)( w>>16);

bmpinfoheader[ 7] = (unsigned char)( w>>24);

bmpinfoheader[ 8] = (unsigned char)( h );

bmpinfoheader[ 9] = (unsigned char)( h>> 8);

bmpinfoheader[10] = (unsigned char)( h>>16);

bmpinfoheader[11] = (unsigned char)( h>>24);

f = fopen("/storage/test.png","wb");

fwrite(bmpfileheader,1,14,f);

fwrite(bmpinfoheader,1,40,f);

for(int i=0; i

{

fwrite(img+(w*(h-i-1)*3),3,w,f);

fwrite(bmppad,1,(4-(w*3)%4)%4,f);

}

fflush(f);

fclose(f);

}

在C JNI中保存位图后,Java和C中的位图是不同的.我正在努力找出问题所在,我该如何找到问题所在.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值