Reputation: 1800
I'm developing an app for creating collages - user can choose and load pictures to set of ImageViews, then he can scale and move them and save it e.g. to album. So, I have an issue with quality of saved image - it's low! I use converting view to bitmap method, and I scale view to fit to 2000x2000 size, but , I guess, scaling don't improve the quality of image - it's like a screenshot of that view(that I convert to bitmap), and I just scale this snapshot - because of it I have low quality image output(
So, guys can I get higher quality of image from view then just its snapshot?
This is my method of converting view ti bitmap:
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;
}
Upvotes: 0
Views: 1330
Reputation: 1800
I have solved this issue by scaling all of main view childs like this :
/**
* 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());
And after taking a snapshot of resulted view I change back layout params of all views in my main layout.
Upvotes: 1