Android:如何将视图转换为位图,而不捕获背景屏幕

时间:2011-12-08 17:21:57

标签: android image bitmap screen

对于我的应用程序,我使用了缩放缩放功能,通过改编教程并创建自定义视图http://www.zdnet.com/blog/burnette/how-to-use-multi-touch-in-android-2-part-6-implementing-the-pinch-zoom-gesture/1847

现在我正在将缩放图像捕获为位图。

部分我可以通过使用

来获取位图
setDrawingCacheEnabled(true);
Bitmap bm = Bitmap.createBitmap(finalView.getDrawingCache());
setDrawingCacheEnabled(false);

使用这种方法,我得到了缩放图像和屏幕背景。

有没有办法只将缩放的图像捕获为位图?

3 个答案:

答案 0 :(得分:0)

尝试

setDrawingCacheEnabled(false)
finalView.setDrawingCacheEnabled(true);
Bitmap bm = Bitmap.createBitmap(finalView.getDrawingCache());
finalView.setDrawingCacheEnabled(false);

答案 1 :(得分:0)

经过大量搜索后,我在同一社区发现了一个“临时”解决方案。还要感谢同一篇文章中提供的'weakwire'代码。

Getting coordinates and width/height from a matrix

想法很简单,我所做的就是通过裁剪从缩放图像中删除背景屏幕。代码有点冗长,但对我有用。

  1. 首先获取原始位图大小

    float imgWidth = imgBitmap.getWidth()   
    float imgHeight = imgBitmap.getHeight()
    
  2. 获取矩阵(我的应用程序中使用的缩放缩放功能使用矩阵'技巧')值,用于缩放图像并获得scaledWidth& scaled原始图像的高度。

    float[] values = new float[9];
    matrix.getValues(values);
    float globalX = values[2];
    float globalY = values[5];
    float scaledWidth = values[0]*imgWidth;
    float scaledHeight = values[4]*imgHeight;   
    
    // If zoomed Image gets out of screen, I'm trying to crop the image available in the screen by considering image from (0,0)
    
    if(globalX<0)
    globalX = 0;
    
    if(globalY<0)
    globalY = 0;
    
  3. 最后捕获视图并裁剪背景     在我的情况下(“finalView”是自定义视图名称,其中发生缩放缩放)

    setDrawingCacheEnabled(false);
    destroyDrawingCache();
    finalView.setDrawingCacheEnabled(true);
    Bitmap bm = Bitmap.createBitmap(finalView.getDrawingCache());
    finalView.setDrawingCacheEnabled(false);    
    
    //Final Image Width &  Height
    
    int finalWidth = Math.min((int)width,(int)finalView.getWidth());
    int finalHeight = Math.min((int)height,(int)finalView.getHeight());        
    

    //裁剪以获得缩放图像

     Bitmap finalBitmap = Bitmap.createBitmap(bm, (int)globalX, (int)globalY, finalWidth ,finalHeight);
    
  4. 虽然这是一个临时解决方案,但它对我有用。如果有任何替代解决方案,请发布。

答案 2 :(得分:0)

此原始答案here,只需替换设置背景部分即可。希望它有所帮助

public static Bitmap getBitmapFromView(View view) {
    if (view == null) return null;
    //Define a bitmap with the same size as the view
    Bitmap returnedBitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
    //Bind a canvas to it
    Canvas canvas = new Canvas(returnedBitmap);
    // draw white background on the canvas
    canvas.drawColor(Color.WHITE);
    // draw the view on the canvas
    view.draw(canvas);
    //return the bitmap
    return returnedBitmap;
}