2014-01-09 2 views
0

Я пишу программу, которая разделит изображение на домены и диапазонов. В этом домене будет 16X16. Я использую PixelGrabber для получения пикселей. Я использовал для цикла для итерации, но для обработки требуется столько времени. В java любой альтернативу нужно уменьшить на этот раз. Мне нужна лучшая производительность. Можем ли мы использовать для этого какие-либо коллекции?Ускорьте обработку изображения, которое использует PixelGrabber

Мой код:

int[] pix = new int[16 * 16]; 
long start = System.nanoTime(); 
for (int i = 0; i < 512; i += 16) 
{ 
for (int j = 0; j < 512; j += 16) 
{ 
    PixelGrabber pg = new PixelGrabber(Im, i, j, 16, 16, pix, 0, 16); 
    pg.grabPixels(); 
    makeStack(pix, i, j); 
} 
} 
long end = System.nanoTime(); 
+0

Если бы я думал, что это правильно, как для петель вместе, так и шокирующих 262144 раз. Как пробовать, чтобы эти циклы выполнялись параллельно (несколько потоков)? Однако не забудьте использовать структуру данных, которая поддерживает параллельное письмо. В лучшем случае ваше рабочее время может быть уменьшено почти до минимума SINGLETHREADINGTIME/AMOUNTOFTHREADS! – Traubenfuchs

+1

Что такое 'Im'? Что такое 'PixelGrabber'? –

+0

Почему не 'BufferedImage # getRGB (int, int)'? – boring

ответ

1

Ваша проблема сейчас в том, что вы не знаете, почему это медленно. Да, это где-то в коде выше, но вы не можете сказать нам, где точно.

Вы должны действительно запустить код с помощью профилировщика, чтобы увидеть, где он проводит большую часть времени.

При этом для обработки изображений обычно наиболее полезно преобразовать все изображение в массив или int[], а затем обрабатывать его напрямую.

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