首页 文章

在另一个具有相同宽度和高度的位图上绘制位图

提问于
浏览
0

在那里,我想将 Bitmap 叠加到我的另一个 Bitmap 上 . 你可以说,我想在另一个 bitmap 上画一个 Bitmap .

假设我有一个 Bitmap

我想在这个位图上绘制另一个 bitmap "KEEP CALM AND CHECK YOUR WORK"!这将是 Bitmap 1

enter image description here

Bitmap 我想放在 bitmap 上就像效果叠加一样:
enter image description here

这将是 Bitmap 2


问题

我想将 Bitmap 2 叠加到 Bitmap 1 上,说 Bitmap 2 应该高于 Bitmap 1 .

Bitmap 2 应该获得 Bitmap 1 的宽度和高度来覆盖它 .

Bitmap 1 将具有任何宽度和高度,但是,我希望 Bitmap 2 在任何情况下都应该获得 Bitmap 1 的宽度和高度 .

我的代码问题是 crops Bitmap 1 并覆盖 Bitmap 2 然后 . 我的意思是代码获得 Bitmap 2 宽度和高度!


我做了什么

public Bitmap overlay123(Bitmap bmp1, Bitmap bmp2) {
            Bitmap bmOverlay = Bitmap.createBitmap(bmp2.getWidth(), bmp2.getHeight(), bmp1.getConfig());
            float left =(bmp2.getWidth() - (bmp1.getWidth()*((float)bmp2.getHeight()/(float)bmp1.getHeight())))/(float)2.0;
            float bmp1newW = bmp1.getWidth()*((float)bmp2.getHeight()/(float)bmp1.getHeight());
            Bitmap bmp1new = getResizedBitmap(bmp1, bmp2.getHeight(), (int)bmp1newW);
            Canvas canvas = new Canvas(bmOverlay);
            canvas.drawBitmap(bmp1new, left ,0 , null);
            canvas.drawBitmap(bmp2, new Matrix(), null);
            return bmOverlay;
        }

        public Bitmap getResizedBitmap(Bitmap bm, int newHeight, int newWidth) {
            int width = bm.getWidth();
            int height = bm.getHeight();
            float scaleWidth = ((float) newWidth) / width;
            float scaleHeight = ((float) newHeight) / height;
            Matrix matrix = new Matrix();
            matrix.postScale(scaleWidth, scaleHeight);
            Bitmap resizedBitmap = Bitmap.createBitmap(bm, 0, 0, width, height, matrix, false);
            return resizedBitmap;
}

上面代码的问题是它会裁剪或调整 bitmap 1 宽度和高度!


试试2

private Bitmap overlayer(Bitmap bmp1, Bitmap bmp2) {
    Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig());
    Canvas canvas = new Canvas(bmOverlay);
    canvas.drawBitmap(bmp1, new Matrix(), null);
    canvas.drawBitmap(bmp2, new Matrix(), null);
    return bmOverlay;
}

代码问题是它总是在左上角显示 Bitmap 2 ,尺寸更小!


我只需要知道如何将 Bitmap 2 放置 Bitmap 1 获得与 Bitmap 1 相同的宽度和高度 .

我是位图代码的新手,所以我不知道它

谢谢你的推荐!

最终图像应如下所示:
enter image description here

2 回答

  • 2

    MainActivity Output.

    public class MainActivity extends Activity {
        private ImageView Img;
    
        /**
         * Called when the activity is first created.
         */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Button button = (Button) findViewById(R.id.button);
            Img = (ImageView) findViewById(R.id.imageView);
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.top);
                    Bitmap bmt = BitmapFactory.decodeResource(getResources(), R.drawable.back);
                    Img.setImageBitmap(overlayer(bm, bmt));
    
                }
            });
        }
        private Bitmap overlayer(Bitmap bmp1, Bitmap bmp2) {
            Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getHeight(), bmp1.getConfig());
            Canvas canvas = new Canvas(bmOverlay);
            canvas.drawBitmap(bmp1, new Matrix(), null);
            canvas.drawBitmap(bmp2, new Matrix(), null);
            return bmOverlay;
        }
    }
    

    activity_main.xml

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent">
    
    
        <ImageView
            android:id="@+id/imageView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true" />
    
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="New Button"
            android:id="@+id/button"
            android:layout_alignParentTop="true"
            android:layout_alignParentStart="true" />
    </RelativeLayout>
    

    Output:

    Output result see here.

  • 0

    首先,我建议您使用 Try2 作为进一步工作的基础 . 但我会略微修改代码:

    private Bitmap overlayer(Bitmap bmp1, Bitmap bmp2) {
        Bitmap bmOverlay = Bitmap.createBitmap(bmp1.getWidth(), bmp1.getWidth(), bmp1.getConfig());
        Canvas canvas = new Canvas(bmOverlay);
        canvas.drawBitmap(bmp1, null, new Rect(0,0,bmp1.getWidth(),bmp1.getHeight()), new Paint());
        canvas.drawBitmap(bmp2, null, new Rect(0,0,bmp1.getWidth(),bmp1.getHeight()), new Paint());
        return bmOverlay;
    }
    

    我使用了android developer reference上提到的构造函数来绘制位图 . 您定义了一个新的Recatangle,该服务器作为用于缩放/绘制位图到画布的形状 . 在您的情况下,我定义的矩形与您的bitmap1大小相同 . 如果将此重新控制框移交到绘制画布的方法,则画布会将位图缩放到该框大小并在画布上绘制它 .

相关问题