2014-10-08 27 views
0

我想膨脹一個佈局,將其繪製到96x96位圖上,並將其發送到MetaWatch,其96x96黑白屏幕具有灰度等級。事實上,我設法做到了這一點,但我不滿足於這樣的結果:字符不是太大就是太薄,不可讀。將佈局渲染到小型位圖(Android)上

如果我渲染視圖到96x96的位圖,我得到一個小屏幕上非常大的字母:

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

如果我渲染視圖到一個更大的位圖,並通過調用sendViewScaled(R.layout.test_layout, 1, 4)規模回來,縮放的文本看起來不太好。也就是說,它可能更小,但如果我把它做得更小,它會變得太薄。

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使用的值打()幫助一點。

回答