如何将图片框添加到图像?

时间:2016-08-14 06:54:09

标签: android image surfaceview android-custom-view picasso

我正在尝试实现帧功能,这样如果我在从Gallery中捕获/检索后提供图像,我已经完成了这部分,现在我陷入困境的是How can i merge two images with respect to frame image accordingly!!

现在明确给出了合并两个图像的解决方案HereHere

但是他们没有解释用另一个图像调整一个图像的行为,所以在我的例子中,这里有一些例子:

image with frame1

image with frame2

I am already using Libraries like picasso and EasyImage so if they can help?

修改

测试框架示例test frame

1 个答案:

答案 0 :(得分:2)

我做了个例子。请参考此存储库。 https://github.com/nshmura/TestFrame/

Frame类合并图片的位图和帧的位图。

public class Frame {

    //filename of frame
    private String mFrameName;

    //Rect of picture area in frame
    private final Rect mPictureRect;

    //degree of rotation to fit picture and frame.
    private final float mRorate;

    public Frame(String frameName,int left, int top, int right, int bottom, float rorate) {
        mFrameName = frameName;
        mPictureRect = new Rect(left, top, right, bottom);
        mRorate = rorate;
    }

    public Bitmap mergeWith(Context context, Bitmap pictureBitmap) {
        Bitmap frameBitmap = AssetsUtil.getBitmapFromAsset(context, mFrameName);

        Bitmap.Config conf = Bitmap.Config.ARGB_8888;
        Bitmap bitmap = Bitmap.createBitmap(frameBitmap.getWidth(), frameBitmap.getHeight(), conf);
        Canvas canvas = new Canvas(bitmap);

        Matrix matrix = getMatrix(pictureBitmap);
        canvas.drawBitmap(pictureBitmap, matrix, null);

        canvas.drawBitmap(frameBitmap, 0, 0, null);

        return bitmap;

    }

    Matrix getMatrix(Bitmap pictureBitmap) {
        float widthRatio = mPictureRect.width() /  (float) pictureBitmap.getWidth();
        float heightRatio = mPictureRect.height() / (float) pictureBitmap.getHeight();

        float ratio;

        if (widthRatio > heightRatio) {
            ratio = widthRatio;

        } else {
            ratio = heightRatio;
        }

        float width = pictureBitmap.getWidth() * ratio;
        float height = pictureBitmap.getHeight() * ratio;
        float left = mPictureRect.left - (width - mPictureRect.width()) / 2f;
        float top = mPictureRect.top - (height - mPictureRect.height()) / 2f;

        Matrix matrix = new Matrix();
        matrix.postRotate(mRorate);
        matrix.postScale(ratio, ratio);
        matrix.postTranslate(left, top);

        return matrix;
    }
}

像这样使用:

//This is sample picture.
//Please take picture form gallery or camera.
Bitmap pictureBitmap = AssetsUtil.getBitmapFromAsset(this, "picture.jpg");

//This is sample frame.
// the number of left, top, right, bottom is the area to show picture.
// last argument is degree of rotation to fit picture and frame.
Frame frameA = new Frame("frame_a.png", 113, 93, 430, 409, 4);
Bitmap mergedBitmap = frameA. mergeWith(this, pictureBitmap);

//showing result bitmap
ImageView imageView = (ImageView) findViewById(R.id.image);
imageView.setImageBitmap(mergedBitmap);

结果如下:

enter image description here