В своем приложении я часто использую 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 секунд!
Как это может быть?Спасибо.