Вырезание центральной области растрового изображения и сжатие в Android - PullRequest
2 голосов
/ 20 февраля 2012

Я пытаюсь динамически создавать изображения в Android, беря существующее растровое изображение и удаляя его центр, чтобы сделать «обрезанную» версию.Высота получающегося изображения, естественно, будет меньше оригинала, что-то вроде прикрепленного примера.

Я получил грубый способ сделать это, создав два новых растровых изображения из оригинала, одно из которых содержит верхнюю часть изображения.над секцией кадрирования (например, головой андроида в примере), а другая содержит оставшееся изображение под секцией кадрирования (лапами андроида) с использованием метода Bitmap.createBitmap(source, x, y, width, height), затем рисует обе эти растровые изображения на холсте размером, равнымисходное изображение за вычетом удаленного пространства.

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

Мне было интересно, есть ли более эффективный способ сделать это.Что-то вроде рисования оригинального растрового изображения на холсте с использованием Path с xfermode его Paint, установленным в new PorterDuffXfermode(Mode.DST_OUT), чтобы вырезать часть изображения, которую я хочу удалить.Но это, кажется, очищает эту область и не уменьшает изображение, т. Е. Оставляет большой пустой промежуток в середине Android.

Любые предложения с благодарностью!

Example of cutting out centre of bitmap

1 Ответ

1 голос
/ 20 февраля 2012

Почему вы создаете два растровых изображения?Вам нужно только создать одно растровое изображение, а затем дважды выполнить canvas.drawBitmap ().

Bitmap bmpOriginal;
Bitmap bmpDerived = Bitmap.create(...);
Canvas canvas = new Canvas(bmpDerived);
canvas.drawBitmap(bmpOriginal, rectTopSrc, rectTopDst, null);
canvas.drawBitmap(bmpOriginal, rectBottomSrc, rectBottomDst, null);

Готово.

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