[Android] 이미지 편집: 둥근 이미지 만들기

2543 단어
원각 그림을 만드는 방식은 대동소이하다. 가장 간단한 것은 9.png 미용사가 만든 건이런 것이 가장 편리하고 직접 설정하면 된다.
또 하나는 재단을 통해서.
이곳의 커팅은 원도에 근거하여 우리 스스로 새로운bitmap을 생성하는 것을 말한다. 이때 그림의 목표 구역을 원각 국역으로 지정한다.
이런 방법은 새로운bitmap을 만들어야 하기 때문에 최소한 2배의 그림 메모리를 소모할 수 있다.다음은 코드의 의미를 분석해 봅시다. a. 먼저 지정된 넓이bitmap을 만들고 출력의 내용으로 b. 그리고 같은 크기의 직사각형을 만들고 캔버스로 그릴 때 원각 각도를 지정합니다.이렇게 천에 둥근 직사각형이 하나 생겼다.c. 마지막으로 붓의 커팅 방식을 Mode로 설정합니다.SRC_IN.원도를 화포에 겹치다.이렇게 출력된bitmap은 원도가 직사각형 국역 내의 내용이다.
/**
	  *     
	  * @param bitmap
	  * @return
	  */
	 public static Bitmap getRoundedCornerBitmap(Bitmap bitmap) { 
	     Bitmap output = Bitmap.createBitmap(bitmap.getWidth(), 
	         bitmap.getHeight(), Bitmap.Config.ARGB_8888); 
	     Canvas canvas = new Canvas(output);

	     final int color = 0xff424242; 
	     final Paint paint = new Paint(); 
	     final Rect rect = new Rect(0, 0, bitmap.getWidth(), bitmap.getHeight()); 
	     final RectF rectF = new RectF(rect); 
	     final float roundPx = 12;

	     paint.setAntiAlias(true); 
	     canvas.drawARGB(0, 0, 0, 0); 
	     paint.setColor(color); 
	     canvas.drawRoundRect(rectF, roundPx, roundPx, paint);

	     paint.setXfermode(new PorterDuffXfermode(Mode.SRC_IN)); 
	     canvas.drawBitmap(bitmap, rect, rect, paint);
	     bitmap.recycle();
	     return output;
	 }

그럼 세 번째는 BitmapShader를 이용해서...
int widthLimit = 96;
		int heightLimit = 96;
		Bitmap bitmap = Bitmap.createScaledBitmap(BitmapFactory.decodeResource(context.getResources(), imageId), 96,96, false);
		
		BitmapShader shader;
		shader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);

		Paint paint = new Paint();
		paint.setAntiAlias(true);
		paint.setShader(shader);

		RectF rect = new RectF(0.0f, 0.0f, widthLimit, heightLimit);

		// rect contains the bounds of the shape
		// radius is the radius in pixels of the rounded corners
		// paint contains the shader that will texture the shape
		Bitmap output = Bitmap.createBitmap(widthLimit, 
		         heightLimit, Bitmap.Config.ARGB_8888); 
		Canvas canvas = new Canvas(output);
		canvas.drawRoundRect(rect, 12, 12, paint);
		
		//drawable = context.getResources().getDrawable(imageId);
		//drawable = new BitmapDrawable(ImageUtil.drawImageDropShadow(tmp));
		// Log.i(TAG, "======>>>>>> "+context.getPackageName() + " imageId:" + imageId);
		// drawable = new BitmapDrawable(BitmapFactory.decodeResource(context.getResources(), imageId));
		drawable = new BitmapDrawable(output);
		bitmap.recycle();

좋은 웹페이지 즐겨찾기