以编程方式在android中截取截图

时间:2012-08-29 18:32:44

标签: android android-layout bitmap

拍摄屏幕截图我正在使用以下代码

  public void takeScreenShot(){
    File wallpaperDirectory = new File("/sdcard/Hello Kitty/");
    if(!wallpaperDirectory.isDirectory()) {
    // have the object build the directory structure, if needed.
    wallpaperDirectory.mkdirs();
    // create a File object for the output file
    }
    File outputFile = new File(wallpaperDirectory, "Hello_Kitty.png");
    // now attach the OutputStream to the file object, instead of a String representation
    // create bitmap screen capture
    Bitmap bitmap;
    View v1 = mDragLayer.getRootView();
    v1.setDrawingCacheEnabled(true);
    bitmap = Bitmap.createBitmap(v1.getDrawingCache(),0,0,v1.getWidth(),v1.getHeight());
    v1.setDrawingCacheEnabled(false);

    OutputStream fout = null;


    try {
        fout = new FileOutputStream(outputFile);
      //  Bitmap bitMap = Bitmap.createBitmap(src)
        bitmap.compress(Bitmap.CompressFormat.JPEG, 90, fout);
        fout.flush();
        fout.close();

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

现在我想要一个裁剪位图,我想要从左边裁剪一些部分,从底部裁剪一些部分,所以我使用了这样的代码

      Bitmap.createBitmap(v1.getDrawingCache(),v1.getWidth()/10,v1.getHeight()/10,v1.getWidth(),v1.getHeight());

但我收到了错误

   08-29 23:41:49.819: E/AndroidRuntime(3486): java.lang.IllegalArgumentException: x +    width must be <= bitmap.width()
   08-29 23:41:49.819: E/AndroidRuntime(3486):  at android.graphics.Bitmap.createBitmap(Bitmap.java:410)
    08-29 23:41:49.819: E/AndroidRuntime(3486):     at android.graphics.Bitmap.createBitmap(Bitmap.java:383)

任何人都可以告诉我如何从左侧和底部裁剪部分位图,谢谢......

2 个答案:

答案 0 :(得分:4)

您似乎误解了该特定Bitmap.create(...)功能的使用情况。您应该指定裁剪结果最终应该具有的宽度和高度,而不是将源的宽度和高度作为最后两个参数提供。

该错误解释了由于您指定了左侧和顶部的偏移量,但是在源的尺寸中传递,因此裁剪的结果将超出原始图像的边界。

如果要做的只是从左侧和顶部裁剪十分之一,只需从原始宽度/高度中减去偏移量:

Bitmap source = v1.getDrawingCache();
int x = v1.getWidth()/10;
int y = v1.getHeight()/10
int width = source.getWidth() - x;
int height = source.getHeight() - y;
Bitmap.createBitmap(source, x, y, width, height);

答案 1 :(得分:0)

而不是使用

Bitmap.createBitmap(v1.getDrawingCache(),v1.getWidth()/10,v1.getHeight()/10,v1.getWidth(),v1.getHeight());

您可以使用bitmap = Bitmap.createBitmap(width, height, Config.ARGB_8888);

请参阅此处了解更多方法Bitmap