0

for taking screen shot i have am using below code

  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();
    }
}

and now i want a cropped bitmap in that i want to crop some portion from left and some portion from bottom so i have used code like this

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

but i got an error

   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)

can anybody tell me how to crop portion of an bitmap from left and bottom thanks...

4

2 に答える 2

4

その特定のBitmap.create(...)機能の使用法を誤解しているようです。ソースの幅と高さを最後の2つのパラメーターとして指定するのではなく、トリミングされた結果の幅と高さを具体的に指定する必要があります。

エラーは、左右からのオフセットを指定したが、ソースの寸法を渡したため、トリミングされた結果が元の画像の境界を超えることを説明しています。

左右の10分の1を切り抜くだけの場合は、元の幅/高さからオフセットを差し引くだけです。

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 に答える