2013-11-18 2 views
0

Я пишу приложение для Android, которое читает пиксели растрового изображения, используя getPixel, и он работал, за исключением того, что он использовал много вычислительной мощности. Итак, я попытался использовать getPixels и сохранить все целые числа в целочисленном массиве int[]. Это сократило вычислительное время до третьего, но конечный результат полностью отличался от предыдущего.Использование bitmap getPixels, вместо растрового изображения getPixel возвращает другой результат?

Я не знаю, возвращает ли getPixels целые числа или если я просто что-то пропустил в своем коде.

старый код (рабочий):

int bitmapWidth = bitmap.getWidth(); 
    int bitmapHeight = bitmap.getHeight(); 

    for (int X = 0; X < bitmapWidth; X++) 
    { 

     for(int Y = 0; Y < bitmapHeight;Y++) 
     { 
      colorValue = Color.red(bitmap.getPixel(X,Y)); 

      //Making use of colorValue here 

     } 
    } 

Новый код (другой результат):

int bitmapWidth = bitmap.getWidth(); 
    int bitmapHeight = bitmap.getHeight(); 

    int[] intArray = new int[bitmap.getWidth()*bitmap.getHeight()]; 
    bitmap.getPixels(intArray,0,bitmap.getWidth(),0,0,bitmap.getWidth(),bitmap.getHeight()); 


    for (int X = 0; X < bitmapWidth; X++) 
    { 


     for(int Y = 0; Y < bitmapHeight;Y++) 
     { 
      colorValue = Color.red(intArray[X*Y]); 

      //Making use of colorValue here 

     } 
    } 

Я знаю intArray[X*Y] даст мне intArray[0] при чтении первой строки и первого столбца, но если те, это единственные места, которые затронуты, это меня не беспокоит.

ответ

3

Ваше индексирование не так. Вы должны использовать y*w + x вместо x*y. Итак:

colorValue = Color.red(intArray[X + Y * bitmap.getWidth()]); 
+0

Я на самом деле пришел к такому выводу, и я чувствую себя настолько глупо, что по какой-то причине, хотя x * y на самом деле будет работать. Спасибо! –

Смежные вопросы