我在拍摄截图时遇到错误并使用裁剪图片创建位图
下面是我的代码
View v1 = mKittyBGLayer.getRootView();
v1.setDrawingCacheEnabled(true);
Bitmap source = v1.getDrawingCache();
int width = source.getWidth();
int height = source.getHeight();
System.out.println("vListView : -"+vListView.getWidth());
System.out.println("hListView : -"+hListView.getHeight());
System.out.println("Width : -"+width);
System.out.println("Height : -"+height);
bitmap = Bitmap.createBitmap(source, vListView.getWidth(), 0, width, height - hListView.getHeight());
我的logcat是
11-01 11:00:31.419: I/System.out(1658): vListView :- 60
11-01 11:00:31.429: I/System.out(1658): hListView :- 60
11-01 11:00:31.429: I/System.out(1658): Width :- 480
11-01 11:00:31.429: I/System.out(1658): Height :- 320
11-01 11:00:31.429: D/AndroidRuntime(1658): Shutting down VM
11-01 11:00:31.429: W/dalvikvm(1658): threadid=1: thread exiting with uncaught exception (group=0x40018560)
11-01 11:00:31.429: E/AndroidRuntime(1658): FATAL EXCEPTION: main
11-01 11:00:31.429: E/AndroidRuntime(1658): java.lang.IllegalArgumentException: x + width must be <= bitmap.width()
11-01 11:00:31.429: E/AndroidRuntime(1658): at android.graphics.Bitmap.createBitmap(Bitmap.java:410)
11-01 11:00:31.429: E/AndroidRuntime(1658): at android.graphics.Bitmap.createBitmap(Bitmap.java:383)
11-01 11:00:31.429: E/AndroidRuntime(1658): at com.appsehs.android.CUTECRAZYKITTENDRESSUPGAME.PhotoSortrActivity.takeScreenShot(PhotoSortrActivity.java:247)
11-01 11:00:31.429: E/AndroidRuntime(1658): at com.appsehs.android.CUTECRAZYKITTENDRESSUPGAME.PhotoSortrActivity.onOptionsItemSelected(PhotoSortrActivity.java:274)
11-01 11:00:31.429: E/AndroidRuntime(1658): at android.app.Activity.onMenuItemSelected(Activity.java:2205)
在这里你可以看到x&lt; bitmap.getWidth意思是60&lt; 480
虽然我收到错误
答案 0 :(得分:21)
不,不是x must be < bitmap.width()
。它说x + width must be <= bitmap.width()
。
您正在创建Bitmap
,如此:
Bitmap.createBitmap(source, 60, 0, 480, 260); // 320 - 60 = 260
基本上,您在x = 60, y = 0
上的x = 480 + 60, y = 260
到Bitmap
,只有480x320。显然,这是不可能的,因为x
坐标不在Bitmap
。
如果不知道确切的用例,很难告诉你如何解决这个问题。基本上,您的source
图片必须符合{ x1: x, x2: x + width, y1: y, y2: y + height }
。
如果您只想从第60个像素开始绘制,那么您需要这样做:
Bitmap.createBitmap(source, vListView.getWidth(), 0, width - vListView.getWidth(), height - hListView.getHeight());
答案 1 :(得分:0)
Bitmap resultBitmap = Bitmap.createBitmap(sourceBitmap, 0, 0,
sourceBitmap.getWidth() - 1, sourceBitmap.getHeight() - 1);
与列表类似,它从0开始,因此宽度必须是位图宽度 - 1。
答案 2 :(得分:0)
如果您是从drawable获取图像,则将其添加到drawable-nodpi文件夹中。
我有同样的问题。现在,完美地工作。
答案 3 :(得分:0)
如果您得到
java.lang.IllegalArgumentException:x必须为 这是Samsungs版本6.0.1的系统崩溃。目前我找不到原因。