2011-11-29 19 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()'を使用し、それぞれのピクセルを1つずつ処理するのではなく、結果として得られる配列をその間で操作することをお勧めします。 – kcoppock

答えて

1

で行われます私のブログのサンプルコード:http://xjaphx.wordpress.com/2011/06/21/image-processing-photography-sepia-toning-effect/ この記事は、アルゴリズムの実装方法を示すことを意味するので、他には何も言及していません。パフォーマンスの問題については

、私はお勧め:

  1. あなたは、アプリケーションレベル(Javaコード...)の下で開発getPixels()setPixels()を使用して、2次元配列を操作した場合。まあ、このセピア調では、エミュレータでは5~10秒しかかからず、実際のデバイスでは3秒かもしれません。

  2. 画像処理ライブラリの作成のようにNDKですべての画像処理を行うのが好ましいです。処理がはるかに高速になります。

とにかく、楽しんでください!

+0

歓迎バディ、とにかく、あなたはそれがあなたのために受け入れられるように答えをマークしたいかもしれません、同じ問題を解決している他の人のためです。 StackOverflowへようこそ! –

0

は、それが上記のコードと同じ効果を達成すると、あなたは文句を言わない処理時間、あなたはすべての後に携帯電話を使用しているを心配する必要があります。

そのあなたの問題ではなく、そのもなし分析を解決し、すべてのピクセルの色を操作しないで、あなたの唯一の問題は、得られた画像を保存することになるが、これはああ、あなたが使用していることが表示されます同様