2011-11-29 24 views
0

我對圖像應用棕褐色效果,但是當我點擊按鈕應用其完成但90秒後。圖像處理效果耗時

public static Bitmap effect(Bitmap src, int depth, double red, double green, double blue) 
{ 

     int width = src.getWidth(); 
     int height = src.getHeight(); 
     Bitmap bmOut = Bitmap.createBitmap(width, height, src.getConfig()); 
     final double GS_RED = 0.3; 
     final double GS_GREEN = 0.59; 
     final double GS_BLUE = 0.11; 

     int A, R, G, B; 
     int pixel; 


     for(int x = 0; x < width; ++x) { 
      for(int y = 0; y < height; ++y) { 

       pixel = src.getPixel(x, y); 

       A = Color.alpha(pixel);    
       R = Color.red(pixel); 
       G = Color.green(pixel); 
       B = Color.blue(pixel); 

       B = G = R = (int)(GS_RED * R + GS_GREEN * G + GS_BLUE * B); 

       R += (depth * red); 
       if(R > 255) { R = 255; } 

       G += (depth * green); 
       if(G > 255) { G = 255; } 

       B += (depth * blue); 
       if(B > 255) { B = 255; } 
       bmOut.setPixel(x, y, Color.argb(A, R, G, B)); 
        }} 

    return bmOut; 
} 
+0

請更清楚地描述你的問題。你是說這個功能需要很長時間嗎? –

+0

我建議使用'getPixels()'和'setPixels()'來代替它們,並且處理它們之間的結果數組,而不是一次處理一個像素。 – kcoppock

回答

1

哦完成,看來,你正在使用的我的博客上的示例代碼:http://xjaphx.wordpress.com/2011/06/21/image-processing-photography-sepia-toning-effect/ 該文章意味着演示如何實現該算法,因此它肯定不會提及其他任何內容。

至於性能問題,我建議:

  1. 如果您在應用層(Java代碼..)開發,使用getPixels()setPixels()和操縱的二維數組。那麼,在這種棕褐色色調中,模擬器上可能只有5-10秒,在真實設備上它可能是3秒。

  2. 最好在NDK上做所有的圖像處理工作(比如創建圖像處理庫..),處理速度會更快。

無論如何,玩得開心!

+0

歡迎好友,無論如何,您可能希望標記答案,因爲這對您來說是可以接受的,對於有同樣問題的其他人找到答案也是如此。歡迎來到StackOverflow! –

0

你可以只放置一個半透明的橙色/黃色矩形ontop的,這將實現爲你的代碼相同的效果上面,你不會擔心處理時間,您使用的是手機畢竟。

它不是解決你的問題,但它也沒有能力分析和處理每一個像素的顏色,你唯一的問題將被保存結果圖像然而這以類似的方式