Изменение размера и поворот изображения в Android - PullRequest
1 голос
/ 08 апреля 2010

Я пытаюсь повернуть и изменить размер изображения в Android. У меня следующий код (взят из этого учебника):

ОБНОВЛЕНИЕ: ниже добавлен код для более конструктивной обратной связи

     public class AnimatedSprite {
        private Bitmap bitmap;
        private double posX, posY;
        private double velocityX, velocityY;
        private int width, height;
        private int numFrames, frameRate, curFrame;
        private int startFrame, endFrame;
        private Rect dstRect, srcRect;
        private long lastTime, lastFrameTime;
        private boolean looping;
        private enum SpaceshipState {ALIVE, EXPLODE, DEAD};
        public SpaceshipState curState;
        private int respawnTime;


        public AnimatedSprite(Context context, int id, int frames, int fps) {
            this.bitmap = BitmapFactory.decodeResource(context.getResources(),id);
            this.posX = 0;
            this.posY = 0;
            this.velocityX = 0;
            this.velocityY = 0;
            this.numFrames = frames;
            this.frameRate = fps;
            this.width = this.bitmap.getWidth() / frames;
            this.height = this.bitmap.getHeight();
            this.dstRect = new Rect((int)this.posX,(int)this.posY,(int)this.posX+this.width,(int)this.posY+this.height);
            this.startFrame = 0;
            this.endFrame = frames-1;
            this.looping = true;
            this.lastFrameTime = 0;
            this.respawnTime = 0;
            this.setFrameRect(this.startFrame);
        }
            .
            .
            //Other methods
            .
            .

         //Returns a rotated copy of the AnimatedSprite a
    public AnimatedSprite rotateSprite(AnimatedSprite originalSprite, float angle)
    {
              AnimatedSprite rotatedSprite = originalSprite;

            int orgHeight = originalSprite.bitmap.getHeight();
            int orgWidth = originalSprite.bitmap.getWidth();

            //Create manipulation matrix
            Matrix m = new Matrix();
            // resize the bit map
            m.postScale(.25f, .25f);
            // rotate the Bitmap by the given angle
                    //Static angle for testing
            m.postRotate(180);
            //Rotated bitmap
            Bitmap rotatedBitmap = Bitmap.createBitmap(originalSprite.bitmap, 0, 0,
                    orgWidth, orgHeight, m, true); 
            //Set the new sprite bitmap to the rotated bitmap and return
            rotatedSprite.bitmap = rotatedBitmap; 

            return rotatedBitmap;
       }

}

Изображение, кажется, вращается очень хорошо, но оно не масштабируется так, как я ожидаю. Я пробовал разные значения от 0 до 0,99, но изображение становится более пикселизированным, когда я уменьшаю значения масштаба, но визуально оно остается того же размера; в то время как цель, которую я пытаюсь достичь, заключается в том, чтобы уменьшить ее визуально. Я не уверен, что делать на этом этапе, любая помощь приветствуется.

1 Ответ

1 голос
/ 08 апреля 2010

То, что вы делаете, это манипулирование данными пикселей из растрового изображения. Вы уменьшаете количество пикселей в изображении, но это звучит так (потому что мы не можем видеть этот код), как будто растровое изображение масштабируется, чтобы соответствовать тому же размеру на экране. Чтобы уменьшить размер экрана, вам нужно настроить параметры вашего ImageView или любой другой метод, который вы используете для отображения изображения.

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