2016-09-21 4 views
-2

이 코드는 그림의 모든 픽셀을 통과하여 각 그림의 rgb를 변경합니다. 코드를 실행하면 완료하는 데 약 1-2 분이 걸립니다. 나는이 현상이 전체 사진에 대해 590 만 번 반복되는 루프 때문이라고 생각한다. 어떻게 10 초 이상이 과정을 훨씬 빠르게 만들 수 있습니까?코드 처리하는 데 1 분 걸립니다

도움을 주시면 감사하겠습니다. 감사합니다

int r,g,b,colour; 
int [] allpixels = new int [picture.getHeight() * picture.getWidth()]; 
picture.getPixels(allpixels, 0, picture.getWidth(), 0, 0, picture.getWidth(), picture.getHeight()); 

        for(int i = 0; i < allpixels.length; i++) 
        { 
         colour = allpixels[i]; 
         r = Color.red(colour); 
         b = Color.blue(colour); 
         g = Color.green(colour); 

         if(r < FIRSTSECTION){ 
          r = FIRST; 
         }else if(r >= SECONDSECTION && r < THIRDSECTION){ 
          r = SECOND; 
         }else if(r >= THIRDSECTION && r < FOURTHSECTION){ 
          r = THIRD; 
         }else if(r >= FOURTHSECTION && r < FIFTHSECTION){ 
          r = FORTH; 
         } 

         if(b < FIRSTSECTION){ 
          b = FIRST; 
         }else if(b >= SECONDSECTION && b < THIRDSECTION){ 
          b = SECOND; 
         }else if(b >= THIRDSECTION && b < FOURTHSECTION){ 
          b = THIRD; 
         }else if(b >= FOURTHSECTION && b < FIFTHSECTION){ 
          b = FORTH; 
         } 

         if(g < FIRSTSECTION){ 
          g = FIRST; 
         }else if(g >= SECONDSECTION && g < THIRDSECTION){ 
          g = SECOND; 
         }else if(g >= THIRDSECTION && g < FOURTHSECTION){ 
          g = THIRD; 
         }else if(g >= FOURTHSECTION && g < FIFTHSECTION){ 
          g = FORTH; 
         } 

         allpixels[i] = Color.argb(1, r, g, b); 

        } 

        Bitmap bitmap = Bitmap.createBitmap(picture.getWidth(), picture.getHeight(), Bitmap.Config.ARGB_8888); 
        bitmap.setPixels(allpixels, 0, bitmap.getWidth(), 0, 0, bitmap.getWidth(), bitmap.getHeight()); 
        drawableBitmap = new BitmapDrawable(getResources(), bitmap); 

답변

1

나는 이런 식으로 뭔가를 할 opengl을 사용합니다. 이것은 기본 쉐이더를 사용하여 수행 할 수 있으며 Java에서 수행하는 것보다 훨씬 빠르게 실행됩니다. OpenGL을 시작하려면이 링크를 참조하십시오. https://developer.android.com/training/graphics/opengl/index.html

약간의 시간이 걸릴 수도 있지만 꽤 익숙한 튜토리얼입니다. http://www.learnopengles.com/android-lesson-one-getting-started/

관련 문제