Оптимизированный способ рисования холста в дочерней области основного растрового изображения - PullRequest
0 голосов
/ 24 декабря 2018

В настоящее время у меня есть настраиваемое представление, где оно должно рисовать себя в дочернем регионе, в основном растровом изображении.

Размер основного растрового изображения больше, чем область рисования пользовательского вида.В настоящее время так выглядит мой код.Хотя это работает, я считаю, что должен быть способ его дальнейшей оптимизации.

// Code in a custom View
private fun getBitmap(): Bitmap {
    val resources = context.resources

    // Creating a larger master bitmap.
    val screenWidth = resources.getDisplayMetrics().widthPixels;
    val screenHeight = resources.getDisplayMetrics().heightPixels;
    val masterBitmap = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888)
    val masterCanvas = Canvas(masterBitmap)
    masterCanvas.drawColor(Color.WHITE)

    // Creating a smaller child bitmap.
    val childBitmap = Bitmap.createBitmap(
            masterBitmap,
            (screenWidth-width) shr 1,
            (screenHeight-height) shr 1,
            width,
            height
    )

    // Perform drawing on smaller child bitmap.
    val childCanvas = Canvas(childBitmap)
    draw(childCanvas)

    // Copy the smaller child bitmap back to larger master bitmap.
    masterCanvas.drawBitmap(
            childBitmap,
            ((screenWidth-width) shr 1).toFloat(),
            ((screenHeight-height) shr 1).toFloat(),
            Paint()
    )
}

Итак, этот шаг можно суммировать следующим образом:

  1. Создание большего основного растрового изображения.
  2. Создание дочернего растрового изображения меньшего размера.
  3. Выполнение рисования на дочернем растровом изображении меньшего размера.
  4. Копирование дочернего растрового изображения меньшего размера обратно в увеличенное главное растровое изображение.

Мне было интересно, есть ли способ исключить шаг 4: Скопируйте меньший дочерний растр обратно в больший мастер-растровое изображение. ?

Можно ли создать дочернее растровое изображение, которое его памяти данныхобласть напрямую разделяет одну и ту же область памяти данных основного растрового изображения?Так же, Bitmap.createBitmap создаст новый экземпляр Bitmap с вновь выделенной памятью.

Мои желаемые шаги:

  1. Создание большего основного растрового изображения.
  2. Созданиеменьший дочерний растровый файл, который отображается непосредственно на увеличенный главный растровый рисунок.
  3. Выполнение рисования на меньшем дочернем растровом изображении.Это сразу же повлияет на более крупное главное растровое изображение во время процесса рисования дочернего растрового изображения.

Мне было интересно, есть ли какой-либо API, позволяющий мне Создание меньшего дочернего растрового изображения путем сопоставления непосредственно с большим основным растровым изображением.?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...