CreateBitmap --- java.lang.IllegalArgumentException: x должно быть <bitmap.width()
Я получаю ошибку при съемке снимка и создаю растровое изображение с обрезкой
ниже мой код
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());
мой логарифм
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 < bitmap.getWidth означает 60 < 480
хотя я получаю ошибку
Ответы
Ответ 1
Нет, не 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());
Ответ 2
Bitmap resultBitmap = Bitmap.createBitmap(sourceBitmap, 0, 0,
sourceBitmap.getWidth() - 1, sourceBitmap.getHeight() - 1);
Как и в списках, он начинается с 0, поэтому ширина должна быть битовой шириной - 1.
Ответ 3
Также ваша высота y + должна быть <= sourceBitmap.height()
Ответ 4
Если вы получаете изображение из drawable, то добавьте его в папку drawable-nodpi.
У меня такая же проблема. Сейчас работает отлично.