Android: Cropping an Image from the Bottom Up

半腔热情 提交于 2020-01-25 08:43:11

问题


I have an image, and I am trying to overlay a cropped version of the image over the original. Something like this:

Original

Overlay Image

Image after the overlay image is cropped to roughly 50%

Right now, my code below reverses what I want, and returns an image like this:

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

I know I could reverse the image files, but I want to start with the original image and have the overlay draw upwards, rather than starting with the overlay, and drawing the original downwards. Any help is appreciated!


回答1:


You can use this method:

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

Here is my overlay method that may meet your need:

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


来源:https://stackoverflow.com/questions/50124575/android-cropping-an-image-from-the-bottom-up

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!