android view create snapshot and savebitmap
- private Bitmap createScreenshot(int width, int height) {
- // We render to a bitmap 2x the desired size so that we can then
- // re-scale it with filtering since canvas.scale doesn't filter
- // This helps reduce aliasing at the cost of being slightly blurry
- final int filter_scale = 2;
- Picture thumbnail = capturePicture();
- if (thumbnail == null) {
- return null;
- }
- //width = getWidth();
- //height = getHeight();
- width *= filter_scale;
- height *= filter_scale;
- Bitmap bm = Bitmap.createBitmap(width, height, Bitmap.Config.RGB_565);
- Canvas canvas = new Canvas(bm);
- // May need to tweak these values to determine what is the
- // best scale factor
- int thumbnailWidth = thumbnail.getWidth();
- int thumbnailHeight = thumbnail.getHeight();
- float scaleFactor = 1.0f;
- if (thumbnailWidth > 0 && thumbnailHeight > 0) {
- scaleFactor = (float) width / (float)thumbnailWidth;
- } else {
- return null;
- }
- float scaleFactorY = (float) height / (float)thumbnailHeight;
- if (scaleFactorY > scaleFactor) {
- // The picture is narrower than the requested AR
- // Center the thumnail and crop the sides
- scaleFactor = scaleFactorY;
- float wx = (thumbnailWidth * scaleFactor) - width;
- canvas.translate((int) -(wx / 2), 0);
- }
- canvas.scale(scaleFactor, scaleFactor);
- thumbnail.draw(canvas);
- Bitmap ret = Bitmap.createScaledBitmap(bm, width / filter_scale,
- height / filter_scale, true);
- bm.recycle();
- return ret;
- }
- public void saveBitmap(Bitmap bm, String filename){
- //String filename = "/mnt/sdcard/a.png";
- if (null == bm || bm.getWidth() == 0 || bm.getHeight() == 0){
- return;
- }
- File temp = new File(filename);
- FileOutputStream fout = null;
- try{
- temp.createNewFile();
- fout = new FileOutputStream(temp);
- }catch (IOException e){
- e.printStackTrace();
- }
- bm.compress(Bitmap.CompressFormat.PNG, 100, fout);
- try {
- fout.flush();
- } catch (IOException e) {
- e.printStackTrace();
- }
- try {
- fout.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- if (!bm.isRecycled()){
- bm.recycle();
- }
- }
- Bitmap getViewBitmap(View v){
- Bitmap drawingCache = Bitmap.createBitmap(v.getWidth(),
- v.getHeight(), Bitmap.Config.RGB_565);
- Canvas cvs = new Canvas();
- cvs.setBitmap(drawingCache);
- v.draw(cvs);
- return drawingCache;
- }