如何从具有父背景的视图中捕获位图

时间:2014-06-03 22:28:30

标签: android bitmap

我想从视图创建一个位图,并让位图包含父视图中的背景。

以下代码将捕获视图“v”:

  v.buildDrawingCache();
  Bitmap b = Bitmap.createBitmap (v.getDrawingCache());

但背景将只是“v”的背景。在这种情况下,“v”具有透明背景,因此“b”具有透明的alpha通道。我希望“b”包含实际显示的背景。

想法?

2 个答案:

答案 0 :(得分:3)

我可以建议您使用以下解决方案。由于您可以让几个父母具有半透明背景,您可以捕获整个活动窗口,然后裁剪您需要的部分(您的视图边界)。

例如:

    View root = getWindow().getDecorView().getRootView();
    root.setDrawingCacheEnabled(true);
    root.buildDrawingCache();
    // here you got whole screen bitmap
    Bitmap screenshot = root.getDrawingCache();

    // get view coordinates
    int[] location = new int[2];
    view.getLocationInWindow(location);

    // crop the screenshot
    Bitmap bmp = Bitmap.createBitmap(screenshot, location[0], location[1], view.getWidth(), view.getHeight(), null, false);

执行此操作后,您可以始终确保您的位图包含实际显示的背景。

UPD:如果root.getDrawingCache()无法正常工作,您只需直接在位图上绘制就可以捕获屏幕:

    View root = getWindow().getDecorView().getRootView();
    Bitmap screenshot = Bitmap.createBitmap(root.getWidth(), root.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(screenshot);
    root.draw(canvas);

答案 1 :(得分:0)

尝试v.getBackground()

Bitmap icon = BitmapFactory.decodeResource(mContext.getResources(),v.getBackground());