Java 调用另一个方法时,保持extern int值为C
我正在开发一个Android应用程序,它使用一些本机代码来处理位图。在本机代码中,我从Java代码依次调用了三个方法,每个方法都为extern int提供一个值。第三个方法需要方法1和2生成的第一个和第二个外部整数的值,但它们返回0,声明的默认值Java 调用另一个方法时,保持extern int值为C,java,android,c++,c,java-native-interface,Java,Android,C++,C,Java Native Interface,我正在开发一个Android应用程序,它使用一些本机代码来处理位图。在本机代码中,我从Java代码依次调用了三个方法,每个方法都为extern int提供一个值。第三个方法需要方法1和2生成的第一个和第二个外部整数的值,但它们返回0,声明的默认值 /*header.cpp*/ extern int red1=0; extern int green1=0; extern int blu1=0; /*effect.c*/ static void harris1(AndroidBitmapInfo
/*header.cpp*/
extern int red1=0;
extern int green1=0;
extern int blu1=0;
/*effect.c*/
static void harris1(AndroidBitmapInfo* info, void* pixels){
int xx, yy, green, red;
uint32_t* line;
for(yy = 0; yy < info->height; yy++){
line = (uint32_t*)pixels;
for(xx =0; xx < info->width; xx++){
blu1 = (int) ((line[xx] & 0x00FF0000) >> 16);
//private int
green = (int)((line[xx] & 0x0000FF00) >> 8);
red = (int) (line[xx] & 0x00000FF );
blu1 = rgb_clamp((int)(blu1));
green = rgb_clamp((int)(green));
red = rgb_clamp((int)(red));
line[xx] =
((blu1 << 16) & 0x00FF0000) |
((green << 8) & 0x0000FF00) |
(red & 0x000000FF);
}
pixels = (char*)pixels + info->stride;
}}
static void harris2(AndroidBitmapInfo* info, void* pixels){
int xx, yy, blue, red;
uint32_t* line;
for(yy = 0; yy < info->height; yy++){
line = (uint32_t*)pixels;
for(xx =0; xx < info->width; xx++){
//private int
blue = (int) ((line[xx] & 0x00FF0000) >> 16);
green1 = (int)((line[xx] & 0x0000FF00) >> 8);
//private int
red = (int) (line[xx] & 0x00000FF );
blue = rgb_clamp((int)(blue));
green1 = rgb_clamp((int)(green1));
red = rgb_clamp((int)(red));
line[xx] =
((blue << 16) & 0x00FF0000) |
((green1 << 8) & 0x0000FF00) |
(red & 0x000000FF);
}
pixels = (char*)pixels + info->stride;
}}
static void harris3(AndroidBitmapInfo* info, void* pixels){
int xx, yy, blue, green;
uint32_t* line;
for(yy = 0; yy < info->height; yy++){
line = (uint32_t*)pixels;
for(xx =0; xx < info->width; xx++){
//local int
blue = (int) ((line[xx] & 0x00FF0000) >> 16);
green = (int)((line[xx] & 0x0000FF00) >> 8);
//the only values displayed in the final Bitmap
red1 = (int) (line[xx] & 0x00000FF );
blue = rgb_clamp((int)(blue));
green = rgb_clamp((int)(green));
red1 = rgb_clamp((int)(red1));
//HERE I USE blu1, green1, red1
line[xx] =
((blu1 << 16) & 0x00FF0000) |
((green1 << 8) & 0x0000FF00) |
(red1 & 0x000000FF);
}
//blu1 and green1 are 0, red has the correct value
pixels = (char*)pixels + info->stride;
}}
/*header.cpp*/
外部内部red1=0;
外部绿色1=0;
外部int blu1=0;
/*效应c*/
静态void harris1(AndroidBitmapInfo*信息,void*像素){
int xx,yy,绿色,红色;
uint32_t*线;
用于(yy=0;yyheight;yy++){
行=(uint32_t*)像素;
对于(xx=0;xxwidth;xx++){
blu1=(int)((行[xx]&0x00FF0000)>>16);
//私有整数
绿色=(int)((第[xx]行和0x0000FF00)行>>8);
红色=(int)(第[xx]行和0x00000FF);
blu1=rgb_钳位((int)(blu1));
绿色=rgb_夹具((int)(绿色));
红色=rgb_夹具((内部)(红色));
第[xx]行=
((blu1高度;yy++){
行=(uint32_t*)像素;
对于(xx=0;xxwidth;xx++){
//私有整数
蓝色=(int)((行[xx]&0x00FF0000)>>16);
绿色1=(int)((第[xx]行和0x0000FF00)行>>8);
//私有整数
红色=(int)(第[xx]行和0x00000FF);
蓝色=rgb_夹具((内部)(蓝色));
绿色1=rgb_夹具((int)(绿色1));
红色=rgb_夹具((内部)(红色));
第[xx]行=
((蓝色高度;yy++){
行=(uint32_t*)像素;
对于(xx=0;xxwidth;xx++){
//局部整数
蓝色=(int)((行[xx]&0x00FF0000)>>16);
绿色=(int)((第[xx]行和0x0000FF00)行>>8);
//最终位图中显示的唯一值
red1=(int)(第[xx]行和0x00000FF);
蓝色=rgb_夹具((内部)(蓝色));
绿色=rgb_夹具((int)(绿色));
red1=rgb_钳位((int)(red1));
//这里我用蓝色,绿色,红色
第[xx]行=
((blu1请发布所有三个函数的代码。但首先确保您没有使用任何本地(或成员)与全局变量同名的变量。我确定问题在于我重新调用类effect.c。当我使用相同的代码但都在一个方法中时,一切都很好,我得到blu1、green1、red1值。但是在调用第二个和第三个方法时,extern int返回0,因为这是默认值,我不知道如何保持p itt当我调用第一个方法时,我得到了正确的blu1值,但是当我再次调用第二个方法的类时,我丢失了blu1值,因为它返回到0,正如在头中声明的那样。第二个和第三个方法也是如此。没有名为“effect.c”的类,所以“重新调用”中没有问题的可能它。不要发布代码的模糊描述,发布实际代码。不要摘录,不要“类似这样的东西”,但实际代码。我编辑了问题:harris1给出blu1;harris2给出green1;harris3给出red1,并使用blu1、green1、red1中的新矩阵RGB重建位图。请发布所有三个函数的代码。但首先确保您没有使用任何本地(或成员)与全局变量同名的变量。我确定问题在于我重新调用类effect.c。当我使用相同的代码但都在一个方法中时,一切都很好,我得到blu1、green1、red1值。但是在调用第二个和第三个方法时,extern int返回0,因为这是默认值,我不知道如何保持p itt当我调用第一个方法时,我得到了正确的blu1值,但是当我再次调用第二个方法的类时,我丢失了blu1值,因为它返回到0,正如在头中声明的那样。第二个和第三个方法也是如此。没有名为“effect.c”的类,所以“重新调用”中没有问题的可能它。不要发布代码的模糊描述,发布实际代码。不是摘录,不是“类似这样的东西”,而是实际代码。我编辑了问题:harris1给出blu1;harris2给出green1;harris3给出red1,并用blu1、green1、red1的新矩阵RGB重建位图