【问题标题】:Converting a view to bitmap (quality issue)将视图转换为位图(质量问题)
【发布时间】:2014-09-03 05:53:17
【问题描述】:

我正在开发一个用于创建拼贴画的应用程序 - 用户可以选择并加载图片到一组 ImageViews,然后他可以缩放和移动它们并保存它,例如到相册。所以,我对保存图像的质量有疑问 - 它很低!我使用将视图转换为位图的方法,并缩放视图以适应 2000x2000 大小,但是,我想,缩放不会提高图像的质量 - 它就像那个视图的屏幕截图(我转换为位图),我只需缩放此快照 - 因为它我的图像输出质量低(

那么,伙计们,我可以从视图中获得更高质量的图像而不是快照吗?

这是我转换视图ti位图的方法:

public static Bitmap loadBitmapFromView(ScalingFrameLayout drawingCanvas, int width, int height, Bitmap.Config config) {
        /**
         * Get previous state
         * */
        ViewGroup.LayoutParams prevParams = drawingCanvas.getLayoutParams();

        /**
         * Scale to
         * */
        drawingCanvas.setScaleX((float) width / (float) prevParams.width);
        drawingCanvas.setScaleY((float) height / (float) prevParams.height);

        /**
         * Create disarable layout size
         * */
        drawingCanvas.setLayoutParams(new RelativeLayout.LayoutParams(width, height));
        drawingCanvas.measure(
                RelativeLayout.MeasureSpec.makeMeasureSpec(drawingCanvas.getLayoutParams().width,
                        RelativeLayout.MeasureSpec.EXACTLY),
                RelativeLayout.MeasureSpec.makeMeasureSpec(drawingCanvas.getLayoutParams().height,
                        RelativeLayout.MeasureSpec.EXACTLY));
        drawingCanvas.layout(0, 0, drawingCanvas.getMeasuredWidth(),
                drawingCanvas.getMeasuredHeight());

        /**
         * Create bitmap according a size
         * */
        Bitmap overAllDrawing = Bitmap.createBitmap(width, height, config);

        /**
         * Draw layout on bitmap
         * */
        Canvas canvas = new Canvas(overAllDrawing);
        drawingCanvas.draw(canvas);

        /**
         * Set previous layout params
         * */
        drawingCanvas.setScale(1);
        drawingCanvas.setLayoutParams(prevParams);

        return overAllDrawing;
    } 

【问题讨论】:

    标签: android image bitmap


    【解决方案1】:

    我已经通过像这样缩放所有主视图子视图来解决这个问题:

    /**
             * Create disarable layout size
             * */
            drawingCanvas.setLayoutParams(new RelativeLayout.LayoutParams(width, height));
            drawingCanvas.measure(
                    RelativeLayout.MeasureSpec.makeMeasureSpec(drawingCanvas.getLayoutParams().width,
                            RelativeLayout.MeasureSpec.EXACTLY),
                    RelativeLayout.MeasureSpec.makeMeasureSpec(drawingCanvas.getLayoutParams().height,
                            RelativeLayout.MeasureSpec.EXACTLY));
            drawingCanvas.layout(0, 0, drawingCanvas.getMeasuredWidth(),
                    drawingCanvas.getMeasuredHeight());
    

    在对结果视图进行快照后,我将主布局中所有视图的布局参数改回。

    【讨论】:

      猜你喜欢
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 2021-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-12
      • 1970-01-01
      相关资源
      最近更新 更多