2012-03-21 10 views
13

안드로이드 4.0 또는 4.0.3을 실행하는 에뮬레이터에서 나는 제거 할 수없는 끔찍한 컬러 밴딩을보고 있습니다. 테스트 한 다른 모든 Android 버전에서 그래디언트가 부드럽게 보입니다.안드로이드 4.0 이상에서만 컬러 밴딩

저는 RGBX_8888로 구성된 SurfaceView가 있으며 렌더링 된 캔버스에 밴딩이 없습니다. 렌더링의 마지막에 노이즈 패턴을 오버레이하여 이미지를 수동으로 디더링하면 그래디언트를 부드럽게 다시 만들 수 있습니다. 물론 성능을 저하시키지 않고 피할 수 있습니다.

따라서 밴딩은 나중에 소개됩니다. 나는 4.0+에서 내 SurfaceView가 그려지고 표시되는 사이의 어느 지점에서 더 낮은 비트 깊이로 양자화되고 있다고 가정 할 수 있습니다. 화면 캡처에서 그래디언트가 한 번에 8 개의 값을 스테핑하는 것을 볼 수 있습니다. 각 채널은 555 (565 아님)로 양자화를 제안합니다.

다음 활동 내역 onCreate 함수에 다음을 추가했지만 아무런 차이가 없습니다.

getWindow().setFormat(PixelFormat.RGBA_8888); 
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DITHER); 

위의 내용을 onAttachedToWindow()에 넣으려고했지만 변경 사항이 없습니다.

(나는 RGBA_8888 기본 창 형식은 위의 2.2 어쨌든이라고 생각, 그래서 명시 적으로 형식을 설정하면 4.0 이상에 영향을주지 않습니다 깜짝 선물입니다.) 소스 인 경우

이 질문 잎 어떤 8888이고 대상은 8888입니다. 양자화/밴딩을 소개하고있는 이유는 4.0+에서만 나타나는 이유는 무엇입니까?

매우 수수께끼입니다. 나는 누군가가 약간의 빛을 발산 할 수 있는지 궁금하다.

+1

가능한 중복 [ICS의 비트 맵이 잘못된 픽셀 형식으로로드 됨] (http://stackoverflow.com/questions/9097887/bitmaps-on-ics-are-loaded-with-wrong-pixel-format) –

+0

감사 그 링크를 위해 ... 실제로 같은 문제처럼 보입니다. 일부 답변은 단순히 에뮬레이터 문제 일 수 있으며 확실한 대답은 없지만 지금은 그 문제를 해결할 예정입니다. – threeshinyapples

+0

나는 똑같은 문제를 겪고있다. v2.0 + 및 v2.3 +에서이 문제를 제거 할 수 있었지만 v4.0 이상에서는 문제를 해결할 수있었습니다. 누군가이 문제에 대한 해결책을 알고 있는지 알고 싶습니까? – Sent1nel

답변

2

창피 시도 ..

BitmapFactory.Options options = new BitmapFactory.Options(); 
options.inPreferredConfig = Bitmap.Config.ARGB_8888; 
Bitmap gradient = BitmapFactory.decodeResource(getResources(), R.drawable.gradient, options); 

findViewById(R.id.main).setBackgroundDrawable(new BitmapDrawable(gradient)); 
0

"를 사용하여 호스트 GPU"에뮬레이터 켜기 옵션은 나를 위해 색상 문제를 해결, 신용 내가 안드로이드 4.2을 사용하던 내 경우에는이 답변 https://stackoverflow.com/a/17166234/1287459

로 이동 .2.

+0

주의 사항 : "호스트 GPU"(검은 색으로 표시됨)를 사용하면 스크린 샷이 작동하지 않습니다. –

+0

제 경우에 성공했습니다 ... Google Play에서 좋은 스크린 샷을 얻을 수 있었기 때문에이 작업을 수행했습니다. – Georgie