Использование метода -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);
Спасибо:)