Я делаю свои собственные расчеты пикселей для рисования на экране, и у меня есть растровое изображение спрайта (4x2 изображения в одном файле). Каждое изображение имеет размер 100x100, а общий размер файла - 400x200. Используя следующий метод, мой рисунок не вытягивает правую часть растрового изображения, и расположение на экране не совсем правильное:
public void drawBitmap(Bitmap bitmap, Rect src, RectF dst, Paint paint)
С: Уровень API 1
Нарисуйте указанное растровое изображение, автоматически масштабируя / переводя для заполнения
прямоугольник назначения. Если исходный прямоугольник не нулевой, он
указывает подмножество растрового изображения для рисования.
Примечание: если краска содержит маску-фильтр, который создает маску, которая
простирается за пределы исходной ширины / высоты растрового изображения (например,
BlurMaskFilter), то растровое изображение будет нарисовано так, как если бы оно было
Шейдер с режимом CLAMP. Таким образом, цвет за пределами оригинала
ширина / высота будет копировать цвет края.
Эта функция игнорирует плотность, связанную с растровым изображением. Это
потому что исходные и целевые прямоугольные координатные пространства находятся в
их соответствующие плотности, поэтому уже должны иметь соответствующие
применяется масштабный коэффициент.
Параметры
bitmap> Рисуемое растровое изображение
src> Может быть нулевым. Подмножество растрового изображения, которое нужно нарисовать
dst> Прямоугольник, по которому растровое изображение будет масштабировано / переведено для соответствия
paint> Может быть нулевым. Краска, используемая для рисования растрового изображения
Rect source = new Rect();
source.left = (this.currentFrame % 4) * 100;
source.right = source.left + 100;
source.top = (this.currentFrame / 4) * 100;
source.bottom = source.top + 100;
Rect dest = new Rect();
dest.top = (int) top;
dest.left = (int) left;
dest.right = dest.left + 100;
dest.bottom = dest.top + 100;
// draw current frame onto canvas
//canvas.drawBitmap(pics[this.currentFrame], left, top, painter);
canvas.drawBitmap(pics[0], source, dest, painter);
Документация гласит, что плотности игнорируются, но почему мое изображение масштабируется?