CallIntMethod против класса Java - PullRequest
0 голосов
/ 14 июня 2011

В своем приложении я часто использую Bitmap.getPixel, поэтому я подумал о реализации этой функции с использованием NDK и экономии времени выполнения.К моему удивлению, CallIntMethod занимает больше времени, чем та же самая функция в простой Java ... просто цикл по ширине растровой карты и длине, чтобы прочитать цвета пикселей и вычислить евклидово расстояние от этого цвета до черного.:

//rSrc: bitmap dimension
for(int i=rSrc.left;i<rSrc.right;i++)
for(int j=rSrc.top;j<rSrc.bottom;j++)
{
  int c=bm.getPixel(i,j);
  int r=Color.red(c);
  int g=Color.green(c);
  int b=Color.blue(c);

  double val1=Math.sqrt((cRed-r)*(cRed-r)+(cGreen-g)*(cGreen-g)+(cBlue-b)*(cBlue-b));
}

Функция C:

int i;
int j;
for(i=rSrc.left;i<rSrc.right;i++)
for(j=rSrc.top;j<rSrc.bottom;j++)
{
    int color=(*env)->CallIntMethod(env,b,bitmapGetPixel,i,j);
    int cr=red(color);
    int cg=green(color);
    int cb=blue(color);
    double val=sqrt((cRed-cr)*(cRed-cr)+(cGreen-cg)*(cGreen-cg)+(cBlue-cb)*(cBlue-cb));
}

Функция Java запускается в течение 7 секунд, а собственная функция - 10 секунд!

Как это может быть?Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...