<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Blogger Scott

    Android給scrollView截圖超過屏幕大小形成長圖

    原文轉(zhuǎn)自:http://www.infoword.cn/archives/55

    最近在研究Android屏幕取詞取圖,網(wǎng)上搜到這個通過生成Scollview長圖的方式,可能是一個思路,摘抄如下:
    根據(jù)布局里scrollView的高度來截取圖片。
    代碼如下:
     1 /**
     2      * 截取scrollview的屏幕
     3      * @param scrollView
     4      * @return
     5      */
     6     public static Bitmap getBitmapByView(ScrollView scrollView) {
     7         int h = 0;
     8         Bitmap bitmap = null;
     9         // 獲取scrollview實際高度
    10         for (int i = 0; i < scrollView.getChildCount(); i++) {
    11             h += scrollView.getChildAt(i).getHeight();
    12             scrollView.getChildAt(i).setBackgroundColor(
    13                     Color.parseColor("#ffffff"));
    14         }
    15         // 創(chuàng)建對應(yīng)大小的bitmap
    16         bitmap = Bitmap.createBitmap(scrollView.getWidth(), h,
    17                 Bitmap.Config.RGB_565);
    18         final Canvas canvas = new Canvas(bitmap);
    19         scrollView.draw(canvas);
    20         return bitmap;
    21     }
    22  
    23     /**
    24      * 壓縮圖片
    25      * @param image
    26      * @return
    27      */
    28     public static Bitmap compressImage(Bitmap image) {
    29         ByteArrayOutputStream baos = new ByteArrayOutputStream();
    30         // 質(zhì)量壓縮方法,這里100表示不壓縮,把壓縮后的數(shù)據(jù)存放到baos中
    31         image.compress(Bitmap.CompressFormat.JPEG, 100, baos);
    32         int options = 100;
    33         // 循環(huán)判斷如果壓縮后圖片是否大于100kb,大于繼續(xù)壓縮
    34         while (baos.toByteArray().length / 1024 > 100) {
    35             // 重置baos
    36             baos.reset();
    37             // 這里壓縮options%,把壓縮后的數(shù)據(jù)存放到baos中
    38             image.compress(Bitmap.CompressFormat.JPEG, options, baos);
    39             // 每次都減少10
    40             options -= 10;
    41         }
    42         // 把壓縮后的數(shù)據(jù)baos存放到ByteArrayInputStream中
    43         ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
    44         // 把ByteArrayInputStream數(shù)據(jù)生成圖片
    45         Bitmap bitmap = BitmapFactory.decodeStream(isBm, nullnull);
    46         return bitmap;
    47     }
    48  
    49 /**
    50      * 保存到sdcard
    51      * @param b
    52      * @return
    53      */
    54     public static String savePic(Bitmap b) {
    55         SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss",
    56                 Locale.US);
    57         File outfile = new File("/sdcard/image");
    58         // 如果文件不存在,則創(chuàng)建一個新文件
    59         if (!outfile.isDirectory()) {
    60             try {
    61                 outfile.mkdir();
    62             } catch (Exception e) {
    63                 e.printStackTrace();
    64             }
    65         }
    66         String fname = outfile + "/" + sdf.format(new Date()) + ".png";
    67         FileOutputStream fos = null;
    68         try {
    69             fos = new FileOutputStream(fname);
    70             if (null != fos) {
    71                 b.compress(Bitmap.CompressFormat.PNG, 90, fos);
    72                 fos.flush();
    73                 fos.close();
    74             }
    75         } catch (FileNotFoundException e) {
    76             e.printStackTrace();
    77         } catch (IOException e) {
    78             e.printStackTrace();
    79         }
    80         return fname;
    81     }

    在需要用到的地方調(diào)用getBitmapByView()方法即可。
    但是這樣寫的話有時候會因為截取的圖片太長太大而報outofmemory的錯,所以為了避免內(nèi)存溢出,程序崩掉,要注意用Config.RGB_565,會比ARGB_8888少占內(nèi)存。還有就是把圖片壓縮一下,至少我這樣就沒有報oom的錯了,即:
    1 String fname = ScreenShot.savePic(ScreenShot.compressImage(ScreenShot
    2                         .getBitmapByView(scrollView)));

    posted on 2015-04-15 11:08 江天部落格 閱讀(1287) 評論(0)  編輯  收藏 所屬分類: AndroidJava

    主站蜘蛛池模板: 国产精品亚洲不卡一区二区三区 | 亚洲精品国产免费| 光棍天堂免费手机观看在线观看| 日韩亚洲国产二区| 成人久久久观看免费毛片| 国产一级高清视频免费看| 美女尿口扒开图片免费| 亚洲精品亚洲人成在线观看下载| 免费中文字幕视频| 亚洲香蕉成人AV网站在线观看| 97在线免费视频| 亚洲AV日韩AV天堂久久| free哆啪啪免费永久| 天堂亚洲国产中文在线| 俄罗斯极品美女毛片免费播放| 青青免费在线视频| 亚洲精品高清国产一线久久| 一区二区在线免费观看| 亚洲成a人片在线网站| 国产极品粉嫩泬免费观看 | 中文字幕无码一区二区免费| 西西人体44rt高清亚洲| 国产大片线上免费观看| WWW国产亚洲精品久久麻豆| 色久悠悠婷婷综合在线亚洲| 久久久久国产精品免费网站| 国产成人亚洲精品| 亚洲A丁香五香天堂网| 日本不卡免费新一区二区三区 | 亚洲天堂中文字幕| 女人毛片a级大学毛片免费| 国产A∨免费精品视频| 亚洲精品乱码久久久久久下载| 在线观看免费毛片| 青柠影视在线观看免费| 亚洲综合无码一区二区痴汉| 亚洲中久无码不卡永久在线观看| 91九色老熟女免费资源站| 美女被爆羞羞网站免费| 亚洲黄色免费在线观看| 亚洲成a人在线看天堂无码|