Как перенести изображение из галереи в мой чертежный вид? - PullRequest
1 голос
/ 20 апреля 2020

Я пытаюсь взять фотографию из галереи и отредактировать ее в моем виде чертежа. Я пытаюсь сделать ластик в режиме PorterDuff, но для этого мне нужно 2 растровых изображения, одно - мой ластик, а другое - изображение, которое я импортировал из галереи. Дело в том, что я импортировал изображение в свою активность здесь:

package com.example.digitaldesign;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.Toast;


public class createObject extends AppCompatActivity {

    ViewGroup mainLayout;
    ImageView imageview;
    Button addfromgal;
    private int xDelta;
    private int yDelta;

    private static final int IMAGE_PICK_CODE = 1000;
    private static final int PERMISSION_CODE = 1001;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.createobjectlyt);

        mainLayout = findViewById(R.id.createobjectlyt);
        imageview = findViewById(R.id.image_view);
        addfromgal = findViewById(R.id.addGal);

        addfromgal.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_DENIED) {
                        String[] permissions = {Manifest.permission.READ_EXTERNAL_STORAGE};
                        requestPermissions(permissions, PERMISSION_CODE);
                    } else {
                        pickImageFromGallery();
                    }
                }
                else{
                    pickImageFromGallery();
                }
            }
        });

        imageview.setOnTouchListener(onTouchListener());
    }

    private View.OnTouchListener onTouchListener() {
        return new View.OnTouchListener() {
            @SuppressLint("ClickableViewAccessibility")
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                final int x = (int) event.getRawX();
                final int y = (int) event.getRawY();

                switch (event.getAction() & MotionEvent.ACTION_MASK){

                    case MotionEvent.ACTION_DOWN:
                        RelativeLayout.LayoutParams lParams = (RelativeLayout.LayoutParams)
                                imageview.getLayoutParams();

                        xDelta = x - lParams.leftMargin;
                        yDelta = y - lParams.topMargin;

                        break;

                    case MotionEvent.ACTION_MOVE:
                        RelativeLayout.LayoutParams layoutParams = (RelativeLayout.LayoutParams)
                                imageview.getLayoutParams();

                        layoutParams.leftMargin = x - xDelta;
                        layoutParams.topMargin = y - yDelta;
                        layoutParams.rightMargin = layoutParams.rightMargin + x;
                        layoutParams.bottomMargin = layoutParams.bottomMargin +y;
                        imageview.setLayoutParams(layoutParams);
                        break;

                }

                imageview.invalidate();
                return true;
            }
        };
    }

    private void pickImageFromGallery() {
        Intent intent = new Intent(Intent.ACTION_PICK);
        intent.setType("image/*");
        startActivityForResult(intent, IMAGE_PICK_CODE);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode){
            case PERMISSION_CODE:{
                if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    pickImageFromGallery();
                }
                else{
                    Toast.makeText(this,"Permission denied!",Toast.LENGTH_SHORT).show();
                }
            }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        if (resultCode == RESULT_OK && requestCode == IMAGE_PICK_CODE){
            imageview.setImageURI(data.getData());
        }
    }
}

Изображение в данный момент находится в просмотре изображений, но я могу превратить его в растровое изображение, но в этом действии. Вопрос в том, как перенести это растровое изображение в мой чертежный вид (код ниже):

package com.example.digitaldesign;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Rect;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;


public class createObjectLayout extends View {

    Bitmap tshirt;
    Bitmap fromGal;

    public createObjectLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
        setBackgroundResource(R.drawable.wall);
        tshirt = BitmapFactory.decodeResource(getResources(),R.drawable.tshirt);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        Rect trect = new Rect();
        trect.set(50,50,1050,1350 );
        canvas.drawBitmap(tshirt,null,trect,null);
    }
}

Растровое изображение из Gal должно содержать изображение из галереи. Можете ли вы сказать мне, какой лучший способ сделать это?

...