Android 에 서 는 Bitmap 클래스 를 사용 하여 사각형 그림 을 원형 으로 바 꾸 는 방법

2859 단어 Android원형Bitmap
일반적으로 정 원형 그림 을 만 들 려 면 정사각형 을 바탕 으로 만 실현 할 수 있다.그렇지 않 으 면 타원 이 된다.다음은 어떻게 직사각형 그림 을 정 원형 그림 으로 만 드 는 지 설명 한다.
잔말 말고 진실 이 없 으 면 먼저 그림 을 그 려 라.
원본 그림:
2016319163739626.jpg (480×800)
정원 이 된 후:
2016319163810889.jpg (480×800)
아래 코드:

public static Bitmap makeRoundCorner(Bitmap bitmap) 
{ 
  int width = bitmap.getWidth(); 
  int height = bitmap.getHeight(); 
  int left = 0, top = 0, right = width, bottom = height; 
  float roundPx = height/2; 
  if (width > height) { 
    left = (width - height)/2; 
    top = 0; 
    right = left + height; 
    bottom = height; 
  } else if (height > width) { 
    left = 0; 
    top = (height - width)/2; 
    right = width; 
    bottom = top + width; 
    roundPx = width/2; 
  } 
  ZLog.i(TAG, "ps:"+ left +", "+ top +", "+ right +", "+ bottom); 
 
  Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
  Canvas canvas = new Canvas(output); 
  int color = 0xff424242; 
  Paint paint = new Paint(); 
  Rect rect = new Rect(left, top, right, bottom); 
  RectF rectF = new RectF(rect); 
 
  paint.setAntiAlias(true); 
  canvas.drawARGB(0, 0, 0, 0); 
  paint.setColor(color); 
  canvas.drawRoundRect(rectF, roundPx, roundPx, paint); 
  paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
  canvas.drawBitmap(bitmap, rect, rect, paint); 
  return output; 
} 
다음 에 다시 설명 하 겠 습 니 다.
그림 은 장방형 이기 때문에 그림 의 너비,높이 는 한 쪽 이 다른 쪽 보다 작 을 것 이다.정사각형 을 만 들 려 면 가장 작은 한 쪽 을 기준 으로 다른 쪽 의 표시 범 위 를 재단 해 야 한다.
원 각 의 반지름 은 정사각형 너비 의 절반 으로 CSS 를 사용 해 보면 알 수 있 듯 이 원 을 그 리 는 것 이 편리 하 다.border-radius 를 50%로 설정 하면 된다 는 것 은 모두 일리 가 있다.
안 드 로 이 드 의 UI 는 정말 번거롭다.
사각형 에 원 각 을 그 리 는 코드:

public static Bitmap makeRoundCorner(Bitmap bitmap, int px) 
{ 
  int width = bitmap.getWidth(); 
  int height = bitmap.getHeight(); 
  Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); 
  Canvas canvas = new Canvas(output); 
  int color = 0xff424242; 
  Paint paint = new Paint(); 
  Rect rect = new Rect(0, 0, width, height); 
  RectF rectF = new RectF(rect); 
  paint.setAntiAlias(true); 
  canvas.drawARGB(0, 0, 0, 0); 
  paint.setColor(color); 
  canvas.drawRoundRect(rectF, px, px, paint); 
  paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN)); 
  canvas.drawBitmap(bitmap, rect, rect, paint); 
  return output; 
} 

좋은 웹페이지 즐겨찾기