在保持图像原始大小的同时在图像上绘制路径

时间:2017-08-09 18:12:50

标签: android imageview

在我的应用程序中,我显示文档的图像,然后用户可以用手指对文档进行签名。这样可以正常工作,但问题是在屏幕密度小/屏幕密度较小的设备上,签名图像的大小将是图像视图的大小,它将图像放置在原来的尺寸上,使图像更小,更难以读取。

屏幕尺寸较大的设备没有问题,因为大多数情况下不会调整图像大小。

我通过获取imageview的宽度和高度加载图像并相应地缩放它以防止OOM异常

BitmapFactory.Options opt = new BitmapFactory.Options();
        opt.inMutable = true;
        iv.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                iv.getViewTreeObserver().removeOnPreDrawListener(this);
                try{
                        int width = iv.getWidth();
                        int height = iv.getHeight();

                        int IMAGE_MAX_SIZE = Math.max(width,height);

                        BitmapFactory.Options o = new BitmapFactory.Options();
                        o.inJustDecodeBounds = true;
                        File i = new File(mDocument.getPath());

                    FileInputStream fis = new FileInputStream(i);
                    BitmapFactory.decodeStream(fis, null, o);
                    fis.close();

                        int scale = 1;
                        if (o.outHeight > IMAGE_MAX_SIZE || o.outWidth > IMAGE_MAX_SIZE) {
                            scale = (int)Math.pow(2, (int) Math.ceil(Math.log(IMAGE_MAX_SIZE /(double) Math.max(o.outHeight, o.outWidth)) / Math.log(0.5)));
                        }

                        //Decode with inSampleSize
                        BitmapFactory.Options o2 = new BitmapFactory.Options();
                        o2.inSampleSize = scale;
                        o2.inMutable = true;
                        fis = new FileInputStream(i);
                    Bitmap b = BitmapFactory.decodeStream(fis, null, o2);
                    fis.close();

                        iv.setBitmap(b);
                }catch(Exception e){
                    e.printStackTrace();
                }
                return false;
            }
        });

然后用手指画画后,我通过

获得带有路径的图像
Bitmap b = iv.getImage();

所以我的问题是,如果有办法取一个Path并将其放在未缩放的图像上而不必将未缩放的内容加载到内存中?

我可以创建一个与原始图像大小相同的画布,然后从画布中将路径作为图像获取,然后在我的服务器上合并2吗?

0 个答案:

没有答案