Матрица вращения Android не вращается вокруг точки - PullRequest
1 голос
/ 13 июня 2019

Я изучал, как вращать растровые изображения в Android, единственное, что я смог найти, это использовать матрицу. Это работает для вращений под углом 90 градусов, но кажется, что каждые 90 градусов точка поворота колеблется. Вот мой код, если вы хотите, чтобы я опубликовал изображение / gif ЗДЕСЬ результата, пожалуйста, так и скажите. Спасибо за вашу помощь

    Matrix leftMat = new Matrix();
    leftMat.setRotate ((float) (debug),thrustWidth,0);
    Bitmap leftThruster = Bitmap.createBitmap (thruster,0,0, thruster.getWidth(),thruster.getHeight (),leftMat,true);
    leftThruster.setHasAlpha(true);
    canvas.drawBitmap(leftThruster,(int) (shipX +leftCords[0]),(int) (shipY+leftCords[1]-cameraY),null);

РЕДАКТИРОВАТЬ: кажется, что углы изображения пытаются встретиться с углами "ограничительной рамки", но я не могу получить больше, чем это.

РЕДАКТИРОВАТЬ: обновленный код (не точная копия, но, надеюсь, он дает все, что важно, я также заменил все переменные константами, где это применимо для ясности)

    private Bitmap thruster = BitmapFactory.decodeResource(context.getResources(),R.drawable.thruster);
    private float debug = 0;
    public void draw(Canvas canvas) {
        debug ++;
        Matrix leftMat = new Matrix();  
        leftMat.postRotate(debug,0,0);
        Bitmap leftThruster = Bitmap.createBitmap (thruster,0,0, thruster.getWidth(),thruster.getHeight(),leftMat,false);
        leftThruster.setHasAlpha(false);
        canvas.drawBitmap(leftThruster, 300, 300,null);

Ответы [ 2 ]

1 голос
/ 17 июня 2019

ОБНОВЛЕНИЕ: Я нашел решение, хотя я не знаю, почему этот код не работает, я нашел альтернативу. Вместо canvas.drawBitmap(leftThruster, 300, 300,null); я заменил его на canvas.drawBitmap(thruster,leftMat,null);, а также добавил leftMat.postTranslate(300,300); в leftMat.

0 голосов
/ 19 июня 2019

Оформить заказ в этом приложении, которое демовертирует изображение с помощью матрицы. что я ранее реализовал.

https://github.com/UdayaLakmal/GlideImageRotate

public Bitmap RotateBitmap(Bitmap source, float angle)
{
    Matrix matrix = new Matrix();
    matrix.postRotate(angle);
    return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);
}

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

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