2011-03-01 4 views
0

사용자가 손가락으로 화면에 그릴 수있는 그리기 앱이 있습니다. 그리기는 화면 외부 비트 맵에 발생하고 onDraw()에서 화면에 게시됩니다.Android : 복원 된 캔버스 기반 비트 맵 악화?

사용자가 전화를 걸거나 집으로 돌아가서 집으로 돌아가서 앱으로 돌아 오면 그림 가장자리에 아티팩트가있는 것을 제외하고는 이전 그림과 함께 그리기 화면이 표시됩니다. 여러 개의 집 -> 이력서 -> 집 -> 다시 시작주기를 순환하면 매번 아티팩트가 악화됩니다. 5 사이클 후 결과에 대한 첨부 된 이미지를 참조하십시오.

이전에 본 사람이 있습니까? 왜 이런 일이 일어나는 지 아십니까?

감사

원래 그림 :

enter image description here

5 후 사이클 :

enter image description here

편집 : 추가 사항 : 사용자로

는 scre에 닿을 en, 나는 터치를 가로 채고 OffScreen Bitmap에 경로로 저장합니다, mBitmap. 패스는 Paint.ANTI_ALIAS_FLAG 플래그가 유효한 Paint로 묘화됩니다. 의 onDraw()에서, 나는 통해 화면에 기록 :

@Override 
protected void onDraw(Canvas canvas) { 
    // wipe the canvas 
    canvas.drawColor(0xffffffff); 

    // draw the stored paths 
    canvas.drawBitmap(mBitmap, 0, 0, mBitmapPaint); 

    // draw any active paths 
    if (mStrokePath != null) { 
canvas.drawPath(mStrokePath, mStrokePaint); 
    } 
} 
mBitmapPaint는 다음과 같이 정의된다

:

mBitmapPaint = new Paint(Paint.DITHER_FLAG); 

편집 2 : 좋아, 그것은

내 문제가 있었다 알아 냈있어 Canvas 기반 뷰를 생성하는 Activity에 대한 onResume에서 이미 셰이프가있는 복원 된 Bitmap의 캔버스에 셰이프를 다시로드 했으므로 앤티 앨리어싱이 저하되었습니다.

+0

비트 맵 디스플레이 작동 방식에 대한 자세한 정보를 제공 할 수 있습니까? 동일한 비트 맵을 여러 번 저장하고 있습니까? –

+0

나는 그렇게 믿지 않는다 ... 사용자가 그림을 그릴 때, 나는 그 데이터를 오프 스크린 birmap에 기록한 다음 onDraw() 캔버스에 기록한다.drawBitmap (mBitmap, 0, 0, mBitmapPaint); 활동이 복원되면 onDraw에 대한 단일 호출이 발생하며 offscrren 비트 맵을 변경하는 데는 아무 것도 수행되지 않습니다. –

답변

0

:

내 문제 캔버스 기반의 뷰를 작성 활동의 onResume에, 내가 복원 된 비트 맵의 ​​상단에있는 캔버스에 모양을 다시로드 것을이었다 , 이미 모양이 있었기 때문에 앤티 앨리어싱이 저하되었습니다.

복원 된 캔버스의 문제점이 아니라 캔버스로드를 구현 한 방법이 문제였습니다. 이것을 표시하고 닫으십시오.

0

이전에는 안드로이드 용으로 개발 한 적이 없었으므로 드로잉 시스템에 익숙하지 않았지만 원본 이미지가 여러 번 그려지고 앤티 앨리어싱 가장자리가 강조된 것처럼 보입니다. 캔버스를 강제로 지우거나 닦은 다음 사용자가 홈 화면에서 돌아올 때 다시 그릴 수있는 방법이 있습니까?

+0

이것은 정확하게 생각했지만 onDraw를 시작할 때 이전 그리기를 제거하기 위해 단색으로 화면을 채 웁니다 ... –

0

Paint.FILTER_BITMAP_FLAG을 사용해보십시오. 게시 된 문제의 편집 2 부 당

+0

경로의 경우 비트 맵 페인트 ... 어디에서 사용해야합니까? –

+0

'비트 맵'에. – Wroclai

+0

불행히도 차이는 없습니다. –

관련 문제