0

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

  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)

谁能告诉我如何从左侧和底部裁剪位图的一部分谢谢...

4

2 回答 2

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);
于 2012-08-29T19:42:49.137 回答
0

而不是使用

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

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

更多方法请参考这里

于 2012-08-29T18:53:18.993 回答