Android: обрезка изображения снизу вверх

У меня есть изображение, и я пытаюсь наложить обрезанную версию изображения на оригинал. Что-то вроде этого:

Оригинал Android: обрезка изображения снизу вверх

Наложенное изображение Android: обрезка изображения снизу вверх

Изображение после наложения изображения обрезано примерно до 50% Android: обрезка изображения снизу вверх

Прямо сейчас мой код ниже меняет то, что я хочу, и возвращает изображение, подобное этому:

Android: обрезка изображения снизу вверх

public void setOverlay(ImageView image, Bitmap originalBitmap, double percentageCompleted) {
        int percentHeight;
        int height = originalBitmap.getHeight();
        Bitmap cropped;
        if (percentageCompleted == 0){
            cropped = Bitmap.createBitmap(overlay, 0, 0, overlay.getWidth() , 0 );
        } else {
            percentHeight = (int) Math.floor(height *  (percentageCompleted));
            Log.d("HEIGHT", Double.toString(height));
            Log.d("PERCENT Completed", Double.toString(percentageCompleted));
            Log.d("PERCENT HEIGHT", Integer.toString(percentHeight));
            cropped = Bitmap.createBitmap(overlay, 0, 0, overlay.getWidth() , height-percentHeight);
        }

        originalBitmap = overlay(originalBitmap, cropped);

        //set imageview to new bitmap
        image.setImageBitmap(originalBitmap );
    }

    public Bitmap overlay(Bitmap bmp1, Bitmap bmp2) {
        Bitmap bmp3 = bmp1.copy(Bitmap.Config.ARGB_8888,true);//mutable copy
        Canvas canvas = new Canvas(bmp3 );
        canvas.drawBitmap(bmp2, new Matrix(), null);
        return bmp3;
    }

Я знаю, что могу перевернуть файлы изображений, но я хочу начать с исходного изображения и нарисовать наложение вверх, а не начинать с наложения и рисовать оригинал вниз. Любая помощь приветствуется!

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
61
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать этот метод:

Canvas.drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)

Вот мой метод overlay, который может удовлетворить ваши потребности:

public static Bitmap overlay(Bitmap base, Bitmap overlay, Float percentage) {
    Bitmap resultBitmap = Bitmap.createBitmap(base.getWidth(), base.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(resultBitmap);

    Paint paint = new Paint();

    // base bitmap
    canvas.drawBitmap(base, 0F, 0F, paint);

    // overlay bitmap
    int yOffset = (int) (percentage * base.getHeight());
    Rect rect = new Rect(0, yOffset, overlay.getWidth(), overlay.getHeight());
    canvas.drawBitmap(overlay, rect, rect, paint);
    return resultBitmap;
}

Другие вопросы по теме