Увеличьте непрозрачность фонового изображения маски - PullRequest
0 голосов
/ 02 октября 2019

Я работаю над приложением, в котором мне нужно замаскировать изображение и получить часть этого маскированного изображения из изображения. Я получаю это правильно, но если я поставлю непрозрачность маски меньше, чем выход непрозрачности обрезанного изображения также меньше. Я хочу полностью непрозрачное обрезанное изображение

Для маскировки изображения человека я использую:

ai.fritz: модель видения-люди-сегментация-среда

Для получения изображения из галереи и маскировки и обрезки:

 SegmentOnDeviceModel peopleSegmentOnDeviceModel = new PeopleSegmentMediumOnDeviceModel();
        SegmentManagedModel managedModel = new PeopleSegmentMediumManagedModel();
        FritzVision.ImageSegmentation.loadPredictor(managedModel, new PredictorStatusListener<FritzVisionSegmentPredictor>() {
            @Override
            public void onPredictorReady(FritzVisionSegmentPredictor segmentPredictor) {
                predictor = segmentPredictor;
            }
        });
        predictor = FritzVision.ImageSegmentation.getPredictor(peopleSegmentOnDeviceModel);

        bitmap = drawable.getBitmap();

        visionImage = FritzVisionImage.fromBitmap(bitmap);
        segmentResult = predictor.predict(visionImage);
        personMask = segmentResult.buildSingleClassMask(MaskType.PERSON); // here i set mask with 180 transparancy so image i get from here masking is transparent
        maskedBitmap = segmentResult.buildSingleClassMask(MaskType.PERSON, 255, .5f, .5f);// here i get total opaque image but mask is also opaque
        imageWithMask = visionImage.overlay(personMask);
        croppedMask = visionImage.mask(maskedBitmap, true);

Здесь я установил это обрезанное изображение:

  RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(imageWithMask.getWidth(), imageWithMask.getHeight());
        params.addRule(RelativeLayout.CENTER_IN_PARENT);
        drawingView = new DrawingView(NewActivity.this);
        drawingView.setLayoutParams(params);
        drawingView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
        drawingView.setLineStyle(Utility.LINESTATE);
        drawingView.addBitmap(personMask);
        main_rel.addView(drawingView);

Добавить в изображение:

            drawingView.setErase(false);
            drawingView.setLineStyle(Utility.LINESTATE);

Отстереть в изображении:

            change.setEnabled(false);
            drawingView.setErase(true);

Получить отредактированную растровую маску и снова обрезать вывод:

  Utility.editedBitmap = Bitmap.createBitmap(drawingView.getBitmap().getWidth(), drawingView.getBitmap().getHeight(), drawingView.getBitmap().getConfig());
            Canvas canvas = new Canvas(Utility.editedBitmap);
            personMask = segmentResult.buildSingleClassMask(MaskType.PERSON);
            Bitmap bmp = visionImage.mask(drawingView.getBitmap(), true);
            canvas.drawBitmap(bmp, new Matrix(), new Paint());

            ivCheck.setVisibility(View.VISIBLE);
            if (Utility.editedBitmap == null) {
                ivCheck.setImageBitmap(croppedMask);
            } else {
                main_rel.removeAllViews();
                ivCheck.setImageBitmap(Utility.editedBitmap);
            }

Набор изображений в изображении прозрачный, который я хочу непрозрачным

...