1

是否可以从视图组对象中获取完整的位图?

此代码从当前位于屏幕上的视图组中截取一个“屏幕截图”,但我想要整个视图,以及当前不在屏幕上的视图。

public void export(ViewGroup view){
    view.setDrawingCacheEnabled(true);
    view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
    Bitmap bitmap = view.getDrawingCache(true);
}
4

2 回答 2

0

在这里,我使用 ScrollView 将整个视图变为位图,因此您可以在这里使用任何其他视图组(如 linerlayout 等)代替滚动视图。

    Bitmap map = loadBitmapFromView(getApplicationContext(),scrollView);
            ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            map.compress(Bitmap.CompressFormat.JPEG, 100, bytes);

            //you can create a new file name "test.jpg" in sdcard folder.
            File f = new File("/sdcard" +"/" + "mainemailpdf.jpg");
            f.createNewFile();
            //write the bytes in file
            FileOutputStream fo = new FileOutputStream(f);
            fo.write(bytes.toByteArray());
            bArray = bytes.toByteArray();
            // remember close de FileOutput
            fo.close();

对于 loadBitmapFromView 方法是:

public static Bitmap loadBitmapFromView(Context context, View v) {

        Toast.makeText(context,
                v.getMeasuredHeight() + "::::::::::::" + v.getMeasuredWidth(),
                Toast.LENGTH_LONG).show();
        if (v.getMeasuredHeight() > 0) {

            v.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

            Bitmap b = Bitmap.createBitmap(v.getWidth(), v.getHeight(),
                    Bitmap.Config.ARGB_8888);

            Canvas c = new Canvas(b);

            v.layout(0, 0, v.getWidth(), v.getWidth());

            v.draw(c);

            return b;

        }

        return null;

    }

我希望它有帮助:)

任何查询让我知道。

于 2013-04-09T07:11:37.037 回答
0

这是不可能的,因为 Android 系统会缩小位图。例如 - 如果您的位图大小为 480*800,则其大小为 480*800*4 = 1536000。乘以 4 是因为每个像素是 4 个字节 - RGBA。

对于每个未缩放的图像来说,这意味着超过一兆半。如果 Android 不会缩小图像,您可能会在几次图像加载后得到 OutOfMemoryException。因为您有 3 个选项:

1) view.draw(canvas) 你会得到图像的可见部分(只有实际被绘制到屏幕上的部分)

2) getDrawingCache() - 会给你按比例缩小的图像。

3)创建自定义视图,将位图保存到磁盘并在请求时从那里加载

于 2014-05-31T11:25:05.503 回答