반응형
아래의 링크를 참고하여 제작하였습니다.
하지만 아래 링크는 정상동작 하지 않기에 약간의 수정을 통해 정상적으로 동작하도록 변경하였습니다.
https://codeday.me/ko/qa/20190607/732331.html
이 모양으로 있는 이미지를
Path 영역으로 이루어진 이미지로 바꿀 수 있는 방법입니다.
package com.example.myhandler;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.drawable.BitmapDrawable;
import android.os.Bundle;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
final static String TAG = "CROCUS";
ImageView imageView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.image_view);
// Path로 이루어진 내부의 이미지만 얻어오기 위한 방법. (마스킹을 이용한다.)
Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.rect);
Bitmap resultImg = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Bitmap maskImg = Bitmap.createBitmap(bitmap.getWidth(), bitmap.getHeight(), Bitmap.Config.ARGB_8888);
Canvas mCanvas = new Canvas(resultImg);
Canvas maskCanvas = new Canvas(maskImg);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.FILL);
// path를 얻고자 하는 모양을 만들어준다.
Path path = new Path();
path.moveTo(100, 100);
path.lineTo(150, 180);
path.lineTo(130, 200 );
path.lineTo(50, 90);
path.lineTo(10, 60);
path.close();
// mask 모양이 될 path를 그려주고
maskCanvas.drawPath(path, paint);
// 내부의 영역만 가져오도록 설정한다.
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_IN));
// canvas에 현재 이미지를 그려준 후, 내부의 영역만 가져올 마스킹을 통해 원하는 부분의 이미지를 얻는다.
mCanvas.drawBitmap(bitmap, 0, 0, null);
mCanvas.drawBitmap(maskImg, 0, 0, paint);
imageView.setImageDrawable(new BitmapDrawable(getResources(), resultImg));
}
}
반응형
'Basic > Android' 카테고리의 다른 글
[Android] This Handler class should be static or leaks might occur 해결 방법 (0) | 2019.12.15 |
---|---|
Easing functions 공식 및 그림 (0) | 2019.12.12 |
Android 해상도와 dpi, px, dp, dip, sp의 관계 (0) | 2019.11.17 |
Android View의 상대 좌표 (0) | 2019.11.17 |
Android title bar 제거하는 간단한 코드 (0) | 2019.11.13 |