Плотность растрового изображения, вызывающая проблемы - PullRequest
2 голосов
/ 03 апреля 2012

Я делаю свои собственные расчеты пикселей для рисования на экране, и у меня есть растровое изображение спрайта (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);

Документация гласит, что плотности игнорируются, но почему мое изображение масштабируется?

1 Ответ

1 голос
/ 18 июля 2012

Согласно Renard

Как именно вы загружаете pics[0]?Вы пробовали getResources().openRawResource(imageId)?

Это решило мою проблему.

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