2016-06-17 16 views
1

ここで、canvas.drawRectは、異なるビットマップで別々に動作しています。私は、四角形を上のイメージに描画し、四角形の外側のイメージの一部を鈍くするかぼかしたいとします。私を助けてください。canvas.drawRect画像に矩形を描画しない

draw.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Paint paint = new Paint(); 
      paint.setColor(Color.RED); 
      paint.setStyle(Paint.Style.STROKE); 
      paint.setStrokeWidth(2); 

      Bitmap bitmap=((BitmapDrawable)image.getDrawable()).getBitmap(); 
      Bitmap mutableBitmap = bitmap.copy(Bitmap.Config.RGB_565, true); 

      Bitmap bitmap1 = Bitmap.createBitmap(600,400, Bitmap.Config.RGB_565); 

      Rect r = new Rect(); 
      r.set(100,100,500,300); 

      Canvas canvas = new Canvas(mutableBitmap); 
      Canvas canvas1 = new Canvas(bitmap1); 

      canvas.drawRect(r,paint); 
      canvas1.drawRect(r,paint); 

      image.setImageBitmap(mutableBitmap); 
      image1.setImageBitmap(bitmap1); 

     } 
}); 

enter image description here

答えて

1

あなたは四角形を描画し、外側部分が鈍いようにしたい場合は、この方法でそれを行います。ビットマップを作成して、フルサイズの半透明矩形を描画し、完全な透明色の内側に別の矩形を描画します。次に、ビットマップをイメージに配置します。

は、このコードを試してみてください。

  Bitmap bitmap = Bitmap.createBitmap(600,400,Bitmap.Config.ARGB_8888); 
      Canvas canvas = new Canvas(bitmap); 

      RectF outerRectangle = new RectF(0, 0, 600, 400); 
      RectF innerRectangle = new RectF(100, 100, 500, 300); 

      Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); 
      paint.setColor(Color.BLACK); 
      paint.setAlpha(80); 
      canvas.drawRect(outerRectangle, paint); 

      paint.setColor(Color.TRANSPARENT); 
      paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_OUT)); 
      canvas.drawRect(innerRectangle, paint); 

      paint.setColor(Color.RED); 
      paint.setStyle(Paint.Style.STROKE); 
      paint.setStrokeWidth(2); 
      canvas.drawRect(innerRectangle, paint); 

      image1.setImageBitmap(bitmap); 
0

あなたはプラサドによって与えられた答えを受け入れてきたが、その答えはのdrawRectは別の1つのビットマップに取り組んではなくを扱う記事のタイトルを、対応していませんでした。私はまた、画像の上に描画する長方形を取得する問題を抱えていた、私が見つけた解決策は、パスに矩形を追加し、代わりにdrawPathを使用することでした。

Path boxPath = new Path(); 
boxPath.addRect(100, 100, 500, 300, Path.Direction.CW); 
canvas.drawPath(boxPath, paint); 
関連する問題