2012-11-05 1 views
0

저는 android 용 가우스 필터를 쓰고 있습니다. 이 튜토리얼의 GaussFilter 예에 따르면가우스 필터를 다양한 색상 수로 견고하게 만듭니다.

: http://www.jhlabs.com/ip/blurring.html 나는이 스레드에 따르면이

alpha += f * ((pixelValue >> 24) & 0xff); 

처럼 내 알파 값을 편집 해요 : Using logical bitshift for RGB values

(pixelValue >>24 & 0xff); 

에 해당하지 않습니다
Color.alpha(pixelValue); 

으로 내가 아는 한, 알파 채널은 RGB에서는 선택 사항입니다. 그래서 그것은 알파와 rgb vlaues를 읽고 편집하는 깊이에 달려 있습니다.

다른 색상 깊이에 대한 조합의 많은 예를 들어, 다음과 같습니다 (?)

  • 4 비트 알파 없음
  • 4 비트 + 4 비트 알파
  • 24 비트를 포함한 알파
  • 매킨토시 24 비트 플러스 (또는? 포함) 8 비트 알파를 제공합니다

사용자가 처리 할 이미지의 유형을 알지 못하기 때문에 모든 조합을 잡아라. Color.Red (value), Color.Green (value) ...을 사용하고 싶습니다.하지만이 작업이 너무 느려지는지 확실하지 않습니다. 처리하기 전에 모든 입력을 24 비트 비트 맵으로 변환 할 수는 있지만 시간이 오래 걸립니다.

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

답변

0
  1. 성능에 대해 걱정이된다면 먼저 구현하고 측정해야합니다.

  2. 가능한 가장 빠른 구현을 원한다면 각 픽셀 형식별로 전문화해야합니다. 하지만 가장 가능성이 높은 것은 하나만 처리하면됩니다 (아래 참조). 당신이 Bitmap 클래스 인스턴스로 비트 맵을로드 가정 한편

  3. 은 단 4 가능한 픽셀 포맷이 있고, ARGB_8888 아마 당신도 (아마 RGB_565에 대해 관심을 가져야하는 유일한 하나입니다,하지만 난 기대하지 않습니다 픽셀 당 작은 비트 값으로 멋진 흐림 효과). 실제로 비트 맵은 BitmapFactory.Options 설명서에 따라 기본적으로 ARGB_8888 구성으로로드됩니다. 즉, 표준 안드로이드의 비트 맵 처리 API를 사용하면 변환 할 필요가 없습니다. 필요한 형식을 지정하기 만하면됩니다.

  4. 사실 (pixelValue >>24 & 0xff);Color.alpha(pixelValue);ARGB_8888 픽셀 형식과 동일하지만 더 잘 수행 될 수 있습니다. 0 항상 31..8 비트로

전혀 & 0xFF 작업이 필요하지 않습니다 (>> 반대로, 산술 시프트)의 논리 시프트 연산자를 사용하여.Color.alpha()이 어떻게 구현되는지 확인하십시오.

public static int alpha(int color) { 
    return color >>> 24; 
} 
+0

어떻게됩니까? 감사 :). – Goot

+0

당신을 환영합니다. 더 설명할만한 것이 있습니까? 어쨌든 기다리는 현상금이 있습니다.) –

+0

현상금을받을 때까지 2 시간 더 기다려야합니다;) – Goot

관련 문제