Безопасно ли рисовать часть растрового изображения Android на себя с некоторым перекрытием? - PullRequest
7 голосов
/ 25 мая 2010

Я проверил это на моем Motorola Droid, и он работал как задумано. Тем не менее, я обеспокоен тем, что это может быть:

  1. Ужасно неэффективно.
  2. Не гарантируется работа на всех телефонах Android.

Код:

/* Create a simple 100 by 100 bitmap */
Bitmap myBitmap = Bitmap.createBitmap(100, 100, Bitmap.Config.ARGB_8888);

/* Create a canvas with which to draw on my bitmap */
Canvas myCanvas = new Canvas(myBitmap);

/* Draw a subset of my bitmap onto itself, with the source rectangle and destination rectangle overlapping */
Rect sourceRect = new Rect(10, 0, 99, 99);
Rect destRect = new Rect(0, 0, 89, 99);
myCanvas.drawBitmap(myBitmap, sourceRect, destRect, null);

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

Я бы приветствовал любое понимание этого.

1 Ответ

0 голосов
/ 12 февраля 2016

Это должно быть совершенно безопасно. Что касается пересечения - что может быть не так? Если вы копируете в регион, из которого у вас есть копия, это зависит от реализации, включая ваш код. Наихудший (на самом деле лучший) сценарий - это когда он копируется побайтово, и у вас будет префектная «зебра» репликации вашего региона, где полоса - это разница между областями источника и назначения. Однако, поскольку большинство операций ввода-вывода, даже в памяти, буферизуются, ваша зебра, вероятно, будет иметь помехи из-за несоответствия буфера / полосы. Что может быть немного забавно из-за буфера, размера полосы и фактического расположения области в памяти.

Другими словами, это может выглядеть как изображение в калейдоскопе, но это совершенно безопасно.

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