1

我正在开发 android 应用程序拖放贴纸并在捕获图像后调整贴纸大小。我的问题是保存图像后贴纸位置发生变化。保存后它向下移动了近 20 dp。

我已经将https://github.com/siralam/CameraViewPlus用于 camera2。和https://github.com/wuapnjie/StickerView用于贴纸。

这是我的功能在它上面绘制贴纸并保存。

    downloadButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                final ICallback callback = new ICallback() {
                    @Override
                    public void done(Exception e) {

                        if (e == null) {
                            DebugLog.e("onImageSavedCallback: image saved!");
                            //showCustomDialog(layoutView);
//                            closeButton.performClick();
                            showCustomDialog();
                            cameraView.start();
                        } else {
                            DebugLog.e("onImageSavedCallback: error saving image: " + e.getMessage());
                            showSnackBar("Error saving image", Snackbar.LENGTH_SHORT);
                        }
                    }
                };


                stickerView.setLocked(true);
                stickerView.invalidate();
                Bitmap newBitmap = null;
                Bitmap bitmap = CommonMethods.getBitmapFromView(stickerView);

                try {

                    Bitmap.Config config = imageBitmap.getConfig();
                    if (config == null) {
                        config = Bitmap.Config.ARGB_8888;
                    }

                    newBitmap = Bitmap.createBitmap(imageBitmap.getWidth(), imageBitmap.getHeight(), config);
                    Canvas canvas = new Canvas(newBitmap);
//                    Paint paint = new Paint(Paint.FILTER_BITMAP_FLAG);
                    canvas.drawBitmap(imageBitmap, 0, 0, null);
                    canvas.drawBitmap(bitmap, 0, 0, null);


                } catch (Exception ex) {
                    ex.printStackTrace();
                }

                int t = 1;

                ImageSaver imageSaver = new ImageSaver(
                        newBitmap,
                        getExternalFilesDir(null),
                        callback,
                        t

                );
                mBackgroundHandler.post(imageSaver);


            }
        });

保存图像后,我遇到了贴纸更改 itz 位置的问题。当图像比例类型为中心裁剪时,图像将显示越界。角落部分切割下来。

第一张图片是在保存之前。第二张图片是保存后。

保存前的图像

图片保存后

4

1 回答 1

0

我想出答案。问题是位图尺寸小于贴纸视图。所以当我在位图位置上叠加贴纸时,可能应该从位置 X 开始,即位置 0,贴纸视图是完全匹配父级并且背景是透明的,它覆盖在位图上。

贴纸视图大小为 1080 x 2061,位图大小为 1080 x 1920。保存结果后位置可能会有所不同。

问题解决了。

于 2019-07-12T03:52:23.420 回答