Я работаю над приложением, в котором мне нужно замаскировать изображение и получить часть этого маскированного изображения из изображения. Я получаю это правильно, но если я поставлю непрозрачность маски меньше, чем выход непрозрачности обрезанного изображения также меньше. Я хочу полностью непрозрачное обрезанное изображение
Для маскировки изображения человека я использую:
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);
}
Набор изображений в изображении прозрачный, который я хочу непрозрачным