1. 程式人生 > >Android中在Bitmap上畫網格線

Android中在Bitmap上畫網格線

傳入一個bitmap圖片,和指定網格線的間隔(以畫素為單位),返回新的帶網格線的Bitmap


private static Bitmap drawBackground(Bitmap bitmap,int pixInterval) {
        /**
         * 注意多個createBiamap過載函式,必須是可變點陣圖對應的過載才能繪製
         * bitmap: 原影象
         * pixInterval: 網格線的橫豎間隔,單位:畫素
         */
        Bitmap copy = Bitmap.createBitmap(bitmap.getWidth(),bitmap.getHeight(), Bitmap.Config.ARGB_8888);  //很重要
        Canvas canvas = new Canvas(copy);  //建立畫布
        Paint paint = new Paint();  //畫筆
        paint.setStrokeWidth(1);  //設定線寬。單位為畫素
        paint.setAntiAlias(true); //抗鋸齒
        paint.setColor(Color.RED);  //畫筆顏色
        canvas.drawBitmap(bitmap,new Matrix(),paint);  //在畫布上畫一個和bitmap一模一樣的圖
        //根據Bitmap大小,畫網格線
        //畫橫線
        for (int i = 0; i < bitmap.getHeight() / pixInterval; i++) {
            canvas.drawLine(0, i * pixInterval, bitmap.getWidth(), i * pixInterval, paint);
        }
        //畫豎線
        for (int i = 0; i < bitmap.getWidth() / pixInterval; i++) {
            canvas.drawLine(i * pixInterval, 0, i * pixInterval, bitmap.getHeight(), paint);
        }
        return copy;
    }

效果圖:間隔80畫素:


注意點:只有在可變的bitmap上才能進行矩形、圓形、線的繪製。

    其中Bitmap.create()有很多過載方法,必須選擇返回值為可變bitmap的方法。

    比如:Bitmap.createBitmap(Bitmap bitmap);   和  Bitmap.createBitmap(Bitmap source,int x,int y,int width,int height)這兩種型別就是不可變的。編譯器會報錯,原因是不能在返回的bitmap上繪製。