2011-01-19 1 views
0

Android 앱을 개발 중이며 이상한 문제에 직면하고 있습니다. SurfaceView에서 일부 이미지 처리를하고 있습니다. 나는 캔버스를 사용하여 처리 된 이미지를 그리기 다음과 같은 방법을 해요 :Android : canvas.drawBitmap을 사용하면 이미지가 원래 색을 유지하지 않습니다.

canvas.drawBitmap(image, x, y, paint) 

내 서피스 뷰 SurfaceView는 컬러 배경 (#의 3500ffff, 가지 매우 어두운 녹색)이 있고 이미지가 그려되면, 나는 것을 알 수 있습니다 그 원래 색은 보존되지 않습니다. 비트 맵 알파가 변경된 것처럼 매우 어두운 녹색 색조가 있습니다.

이미이 문제가 발생 했습니까? 이 문제를 해결하는 방법에 대한 아이디어가 있습니까?

+1

올바른 색상을 가지고 계십니까? # 00ffff는 매우 밝은 초록빛으로 보입니다. 알파 = 35는 더 투명 함을 의미합니다. 그래서 '짙은 녹색'색조가 있다면 검은 배경에 투명한 연두색을 그려야한다는 뜻입니까? – f20k

+0

네, 혼란스러워서 죄송합니다. 이것은 실제로 매우 밝은 녹색입니다. 그것은 다른 레이아웃의 배경에 사용하는 색상이며 알파 = 35 이후로 검은 색 배경의 활동이 짙은 녹색으로 보입니다. –

답변

1

이는 16 비트 대상에서 발생합니다. 16 비트 버퍼는 픽셀을 565 형식으로 인코딩하므로 녹색 채널에서 더 높은 정밀도를 제공하므로 때로는 녹색 색조가됩니다. 32 비트 대상/비트 맵은이 문제를 해결합니다.

+0

내 비트 맵 설정을 ARGB_8888로 설정하려고했는데 SurfaceHolder의 픽셀 형식을 RGBA_8888로 변경했지만 문제를 해결하지 못했습니다. 나는 어딘가에서 잘못하고 있니? –

0

이미지가 투명하지 않다고 가정하면 페인트를 어떻게 정의 했습니까? 투명 한 색상이나 특수 효과가 없어야합니다. 페인트에 null을 사용해보십시오.

다른 점은 무엇을 먼저 이미지 또는 배경을 그리는 것입니까? 그리기 순서가 올바른지 궁금해 할뿐입니다.

표면을 투명하게 설정하면 이미지의 색상이 바뀌게됩니까?

내가 생각하는 또 다른 사실은 이벤트 동기화와 관련이 있다고 생각하는 것은 드로잉을 초기화하는 화면에서 손가락을 매우 빠르게 움직일 때 표면에 드로잉을하면 반투명 스프라이트가 생성된다는 것입니다.

+0

ColorMatrixColorFilter를 설정하려면 페인트가 필요합니다. 나는 배경을 먼저 그린다 (XML 레이아웃에 정의되어 있기 때문에 뷰가 생성 될 때 그려진다). 드로잉 메서드가 SurfaceViews의 스레드에 의해 제어되므로 내 비트 맵이 루프로 그려지므로 불투명하게 매우 투명한 스프라이트가 나타날 수 있습니다. –

+0

다음과 같이 비트 맵을 그리기 직전에 배경색을 그려야합니다. canvas.drawColor (myColour); canvas.drawBitmap (image, x, y, paint); onDraw에서. ColorMatrix로 어떤 페인트를 생산하는지 모르겠습니다 ... – Lumis

관련 문제