createBitmap-java.ленг.IllegalArgumentException: x должно быть

Я получаю ошибку при съемке скриншота и создании растрового изображения с обрезкой изображения

ниже мой код

    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

хотя я получаю ошибку

3 ответов


нет, не 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 to 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());

Bitmap resultBitmap = Bitmap.createBitmap(sourceBitmap, 0, 0,
        sourceBitmap.getWidth() - 1, sourceBitmap.getHeight() - 1);

Как и в списках, он начинается с 0, поэтому ширина должна быть шириной растрового изображения-1.


также ваша высота y + должна быть