2011-03-25 66 views

回答

15

我知道的最簡單的方法是使用XFer模式處理從圖形包。下面的函數將從(30,30)到(100,100)的區域剪切到從資源加載的320x480圖像。適應座標來動態改變:

private Bitmap cropBitmap1() { 
    Bitmap bmp2 = BitmapFactory.decodeResource(this.getResources(), R.drawable.image1); 
    Bitmap bmOverlay = Bitmap.createBitmap(320, 480, Bitmap.Config.ARGB_8888); 

    Paint paint = new Paint(); 
    paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); 

    Canvas canvas = new Canvas(bmOverlay); 
    canvas.drawBitmap(bmp2, 0, 0, null); 
    canvas.drawRect(30, 30, 100, 100, paint); 

    return bmOverlay; 
} 
+0

嘿,這將清除整個位圖..我想只清除複製後選定的部分。 – 2011-03-25 13:06:18

+0

不完整,只是部分。嘗試,你會看到。我在發佈前檢查了代碼。 – Zelimir 2011-03-25 13:09:05

+0

好吧我現在就試試這個 – 2011-03-25 13:15:59

109

萬一有人試圖解決同樣的問題,有一個更好的解決方案:Bitmap.createBitmap(Bitmap, int x, int y, int width, int height)。例如,如果您需要從位圖的每一邊裁剪10個像素,則使用以下代碼:

Bitmap croppedBitmap = Bitmap.createBitmap(originalBitmap, 10, 10, originalBitmap.getWidth() - 20, originalBitmap.getHeight() - 20); 
+0

太棒了!更好的方式:) – Angudroid 2013-07-26 15:35:17

+0

如何從動態位圖(從相機捕獲的位圖)中提取矩形? – TharakaNirmana 2013-09-20 06:01:46

+0

沒有得到您的問題。同樣的方法可以工作 - 裁剪位圖與從中提取矩形相同 – 2013-12-18 06:51:42