Java 调用另一个方法时,保持extern int值为C

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

我正在开发一个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* 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重建位图