2014-06-18 4 views
2

그림자가있는 텍스트의 비트 맵을 만들려고하지만 좋은 결과를 얻을 수 없습니다. 문제는 텍스트를 직접 그릴 때 좋지만 텍스트를 비트 맵에 그릴 때 비트 맵을 그리면 문제가 생깁니다.그림자가있는 텍스트의 비트 맵 만들기

코드 : useBitmapfalse로 설정하면 useBitmaptrue로 설정하면, 결과는이

enter image description here

과 같은

public class MyView extends View { 
    private Paint paint; 
    private Bitmap bitmap; 

    public MyView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public void init(){ 
     paint = new Paint(); 
     paint.setColor(Color.BLACK); 
     paint.setTextSize(50); 
     paint.setAntiAlias(true); 
     paint.setTypeface(Typeface.create("HELVETICA", Typeface.NORMAL)); 
     paint.setShadowLayer(30, 0, 0, Color.BLACK); 

     bitmap = Bitmap.createBitmap(500, 300, Bitmap.Config.ARGB_8888); 
     Canvas canvas2 = new Canvas(bitmap); 
     canvas2.drawText("Dec Use", 100, 100, paint); 
    } 

    @Override 
    protected void onDraw(Canvas canvas){ 
     super.onDraw(canvas); 

     final boolean useBitmap = true; 
     if(useBitmap){ 
      canvas.drawBitmap(bitmap, 0, 0, null); 
     } 
     else{ 
      canvas.drawText("Dec Use", 100, 100, paint); 
     } 
    } 
} 

는, 결과는이

처럼 보인다 enter image description here

내가 뭔가를 잃어버린거야?

+0

사람이 해결책을 찾기? – dakshbhatt21

답변

0

품질 손실은 비트 맵과 관련이있는 것으로 보입니다. 회색 그림자을 사용하고 큰 비트 맵을 사용하면 더 좋은 결과를 얻을 수 있습니다 (나중에 다시 찍었다는 의미 일지라도).

bitmap = Bitmap.createBitmap(2000, 2000, Bitmap.Config.ARGB_8888); 
    Canvas canvas2 = new Canvas(bitmap); 
    canvas2.drawText("Dec Use", 200, 200, paint); 

    paint.setShadowLayer(20, 0, 0, Color.GRAY); 
    canvas2.drawText("Dec Use", 200, 200, paint); 

enter image description here

Related answer

+0

그레이 색상은 그림자를 어둡게 만들어 주므로 더 어울립니다. 그러나 나는 그것이 실제로이 문제를 해결한다고 생각하지 않는다. – Cosyn

+0

문제는 비트 맵의 ​​품질입니다. 더 큰 비트 맵 (또는 Bitmap.Config 트릭으로 해결할 수 있지만 그렇게 생각하지는 않습니다)으로 해결할 수 있습니다. – Helix