반응형

 

아래의 링크를 참고하여 제작하였습니다.

하지만 아래 링크는 정상동작 하지 않기에 약간의 수정을 통해 정상적으로 동작하도록 변경하였습니다.

 

https://codeday.me/ko/qa/20190607/732331.html

 

android – 다각형 영역으로 이미지 자르기 - 코드 로그

폴리곤 영역으로 이미지를 자르려고하는데 라이브러리를 찾을 수 없으므로 만들 수 있습니다.OpenCV는이 작은 일에 너무 큽니다. JJIL [enter link description here] 자르기 단지 직사각형 영역.어쩌면 당신은 내가 그것을 성취 할 수있는 아이디어가 있을까요? 도와 주셔서 감사합니다! Nidhi를 위해 :이런 경우를 시도해보십시오. 경로에 대해 다른 캔버스를 만들고 마스크에서 비트 맵을 가져 와서이 마스크 비트 맵을 drawPath

codeday.me

 

이 모양으로 있는 이미지를

 

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));
    }
}

 

 

 

반응형