2014-10-08 5 views
0

나는 레이아웃을 팽창시켜 그것을 96x96 비트 맵에 그려 넣고, 96x96 흑백 화면에 이없고 그라데이션이 회색 인 MetaWatch로 보내고 싶습니다. 실제로, 나는 그럭저럭 그것을 할 수 있었다. 그러나 나는 결과에 만족하지 않고있다 : 글자가 너무 크거나 너무 얇고 읽을 수 없다. 내가 더 큰 비트 맵 위에 뷰를 렌더링 sendViewScaled(R.layout.test_layout, 1, 4)를 호출하여 규모를 축소하는 경우,작은 비트 맵에 레이아웃 렌더링 (안드로이드)

public void sendView(View v) { 
    Bitmap bm = createViewBitmap(v, 1, 1); 
    sendLcdBitmap(bm); 
    bm.recycle(); 
} 

: 나는 최대 96x96 비트 맵 위에 뷰를 렌더링하는 경우

, 나는 작은 화면에 매우 큰 편지를 얻을 크기가 조정 된 텍스트가 좋지 않습니다. 즉, 더 작을 수는 있지만 작게 만들면 너무 얇아집니다.

public void sendViewScaled(View v, int num, int denom) { 
    Bitmap bm = createViewBitmap(v, num, denom); 
    Bitmap bm2 = Bitmap.createScaledBitmap(bm, SCREEN_SIZE, SCREEN_SIZE, false); 
    sendLcdBitmap(bm2); 
    bm2.recycle(); 
    bm.recycle(); 
} 
public void sendViewScaled(int id, int num, int denom) { 
    sendViewScaled(inflateView(id), num, denom); 
} 

비트 맵으로 도면 변환하는 함수이다 :

protected Bitmap createViewBitmap(View v, int num, int denom) { 
    v.measure(MeasureSpec.makeMeasureSpec(SCREEN_SIZE*num/denom, MeasureSpec.EXACTLY) 
      ,MeasureSpec.makeMeasureSpec(SCREEN_SIZE*num/denom, MeasureSpec.EXACTLY) 
      ); 
    Bitmap b = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888); 
    Canvas c = new Canvas(b); 
    c.setDensity(Bitmap.DENSITY_NONE);//DisplayMetrics.DENSITY_xxx; 
    v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight()); 
    v.draw(c); 
    return b; 

} 

함수 sendLcdBitmap() 함수를 사용하여 단일 비트의 비트 맵으로 ARGB_8888 변환 : 그래서

protected boolean isRatherWhite(int color) { 
    return Color.red(color)+Color.green(color)+Color.blue(color) > 127*3; 
    //return color == Color.WHITE; 
} 

을 질문은 :

R.layout.test_layout 같은 레이아웃을 96x96 비트 맵 B & W에 렌더링하려면 회색 그라데이션이 필요하지 않습니다. 좋은 품질을 얻으려면 어떻게해야합니까?

관련 질문 :
Converting a view to Bitmap without displaying it in Android?
getMeasuredWidth returns totally wrong value
How to Resize a Bitmap in Android?
How to convert Views to bitmaps?
http://www.skoumal.net/en/android-how-draw-text-bitmap

UPDATE : isRatherWhite에 사용되는 값 연주는() 조금 도움이되었다.

답변