Использование метода -canvas.drawBitmap(bitmap, src, dst, paint)

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

canvas.drawBitmap(MyBitmap, null, rectangle, null)

Я смотрел онлайн, но не могу найти много помощи.

Ответы

Ответ 1

EDIT


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

В соответствии с комментарием фритюрницы он рисует под чем-то, я добавлю к этому примечание.

drawBitmap(bitmap, srcRect, destRect, paint)  не обрабатывает Z ordering (depth) и порядок вызова draw на объекте имеет значение.

Если у вас есть 3 фигуры для рисования, квадрат, треугольник и круг. Если вы хотите, чтобы квадрат был сверху, он должен быть нарисован последним.


Вы не указали какой-либо источник, поэтому его не нарисовали.

Пример:

У вас есть растровое изображение размером 100x100 пикселей. Вы хотите нарисовать весь битмап.

canvas.drawBitmap(MyBitmap, new Rect(0,0,100,100), rectangle, null);

Вы хотите нарисовать только левую половину растрового изображения.

canvas.drawBitmap(MyBitmap, new Rect(0,0,50,100), rectangle, null);

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

Ответ 2

Основной элемент для запоминания при определении Rect:

  • left < right и top < нижняя

Прямая находится в координатах экрана (положительный Y вниз)...

Мне полезно подумать о аргументах Rect

(left, top, right, bottom)

а

(X, Y, X + Width, Y + Height)

где X, Y - верхний левый угол спрайта.

ПРИМЕЧАНИЕ. Если вы хотите центрировать изображение в определенном месте, не забудьте смещать эти значения на половину ширины и высоты спрайта. Например:

int halfWidth = Width/2;
int halfHeight = Height/2
Rect dstRectForRender = new Rect( X - halfWidth, Y - halfHeight, X + halfWidth, Y + halfHeight );
canvas.drawBitmap ( someBitmap, null, dstRectForRender, null );

Это использует полное исходное изображение (поскольку src rect имеет значение null) и масштабирует его, чтобы он соответствовал размеру и позиции из dstRectForRender... и использовал Paint по умолчанию.

Ответ 3

Я не знаю, почему, но это сработало для меня!

Rect rectangle = new Rect(0,0,100,100);
canvas.drawBitmap(bitmap, null, rectangle, null);

Спасибо:)