2016-03-30 17 views
1

私は、円を半円にアンドロイドキャンバスでカットしようとしています。円はBitmapクラスを使用してロードされます。ここでAndroidビットマップ - サークルを半円にクロップする

は例です:

enter image description here

私はすべてのソリューション、座標を使用しますが、無駄にビットマップをトリミングすることができます、特にものを探してきました。

すべてのヘルプは高く評価され、感謝を...

答えて

1

前に、私は前に、同じ課題を持っていたし、私は簡単な方法でそれを解決し、主要なアイデアは簡単です! ビットマップマスクを使用し、最大整数値(0xFFFFFFFF)で保存するピクセル(この場合は円)を塗りつぶします。ビットのANDを使用して結果カラーを得ることができます。マスクのその他のピクセルBitmap

public void doIt(View view) { 

    ImageView imageView = (ImageView) findViewById(R.id.iv); 
    Bitmap src = Bitmap.createBitmap(500, 500, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(src); 
    canvas.drawColor(Color.BLUE);//fill src bitmap with blue color 
    imageView.setImageBitmap(applyPieMask(src, -90, 60)); 
} 
...私たちが行く

public Bitmap applyPieMask(Bitmap src, float startAngle, float sweepAngle) { 
    int width = src.getWidth(); 
    int height = src.getHeight(); 

    //create bitmap mask with the same dimension of the src bitmap 
    Bitmap mask = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(mask); 
    canvas.drawColor(0x00000000);//fill mask bitmap with transparent black! 

    //init mask paint 
    Paint maskPaint = new Paint(); 
    maskPaint.setColor(0xFFFFFFFF);//pick highest value for bitwise AND operation 
    maskPaint.setAntiAlias(true); 

    //choose entire bitmap as a rect 
    RectF rect = new RectF(0, 0, width, height); 
    canvas.drawArc(rect, startAngle, sweepAngle, true, maskPaint);//mask the pie 


    Bitmap result = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
    for (int i = 0; i < height; i++) { 
     for (int j = 0; j < width; j++) { 
      //combine src color and mask to gain the result color 
      int color = mask.getPixel(i, j) & src.getPixel(i, j); 
      result.setPixel(i, j, color); 
     } 
    } 
    return result; 
} 

そして、ここで:ないあなたがマスクで行われている透明のブラックカラー(0x00000000の)、あること、結果Bitmapを作成し、下記の方法として、画素を埋めます


enter image description here

は、あなたがそれ役に立つ

+0

ありがとう見つけます。とても役に立ちました – Jason

関連する問題