В моем понимании, lockCanvas () может быть очень дорогим, в зависимости от базовой реализации HW.
Цель - предоставить вам буфер, к которому у вас есть прямой доступ.Этот буфер может существовать непосредственно в графическом оборудовании, или это может быть текстура OpenGL или что-то еще.
Теперь, если вы вызываете lockCanvas (), система должна предоставить вам буфер для этих данных, который может включать передачу данных из графического процессора в память, а также преобразование формата изображения (например, yuv в rgb).
Как только вы закончите редактирование своего буфера данных, об операции необходимо сообщить наоборот, обратно в исходный HW-зависимый формат.
Все это может быть довольно дорого, особенно на мобильном устройстве: (
Хороший способ избежать - это изменить данные с помощью функций API ( drawRect () вместо copyRect () ), но это не всегда возможно.