參考:http://www.iteye.com/topic/710262
前面一篇博文介紹了簡單的把Bitmap畫到螢幕上,以及縮放Bitmap以鋪滿螢幕。對Bitmap的操作還有很多。比如截取Bitmap的部分地區,可以使用
mBitmap = Bitmap.createBitmap(bmp, 100, 100, 120, 120);
這句代碼從bmp的(100,100)處截取120*120像素地區放到新的Bitmap中。
縮放一個Bitmap,前面一篇已經涉及到了,可以用Bitmap.createScaledBitmap()方法根據給定的Bitmap建立一個新的,縮放後的Bitmap。
Bitmap mBitmap = Bitmap.createScaledBitmap(bmp, mScreenWidth, mScreenHeight, true);
其中mScreenWidth和mScreenHeight是螢幕的寬度和高度,這裡就將bmp展開到整個螢幕。
每次createBitmap,都會分配新的記憶體,帶來資源的消耗,所以用Bitmap的createBitmap雖然簡單方便,但是不是最優方法。介紹一個比較好點的方法,不用建立新的Bitmap,用Canvas在畫的時候直接縮放或者剪下
canvas.drawBitmap(mBitmap, null, new Rect(0, 0, 200, 200), null);
這裡的Rect對象表示一個矩形地區,從(0,0)到(200,200)之間的矩形地區。這段代碼將把mBitmap縮放並繪製到螢幕上的(0,0)到(200,200)之間的地區。
:
這個方法還有第二個參數我給的是null,其實這個參數也是個Rect對象,表示源Rect。把圖片的某個地區拿出來畫到螢幕的指定地區。
canvas.drawBitmap(mBitmap, new Rect(100, 100, 300, 300), new Rect(100, 100, 200, 200), null);
這裡將mBitmap的(100,100)到(300,300)地區拿出來,自動縮放並畫到螢幕的(100,100)到(200,200)地區。
對於Bitmap的處理,上面介紹的 是最簡單的兩種,平移和縮放。而要是需要更複雜的處理,比如旋轉和傾斜,就得使用Matrix了。下面幾篇將介紹Matrix在畫圖中的使用。
public class ViewActivity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new MyView(this)); } public class MyView extends View { private Bitmap mBitmap; private int mScreenWidth; private int mScreenHeight; public MyView(Context context) { super(context); initialize(); } private void initialize() { DisplayMetrics dm = getResources().getDisplayMetrics(); mScreenWidth = dm.widthPixels; mScreenHeight = dm.heightPixels; // Bitmap bmp mBitmap = ((BitmapDrawable)getResources().getDrawable(R.drawable.show)).getBitmap();// mBitmap = Bitmap.createScaledBitmap(bmp, mScreenWidth, mScreenHeight, true); } @Override protected void onDraw(Canvas canvas) {// super.onDraw(canvas); //當然,如果介面上還有其他元素需要繪製,只需要將這句話寫上就行了。// canvas.drawBitmap(mBitmap, 0, 0, null);// canvas.drawBitmap(mBitmap, null, new Rect(0,0,200,200), null); canvas.drawBitmap(mBitmap, new Rect(100, 100, 300, 300), new Rect(100, 100, 200, 200), null); } }}