Сожалею. Я должен был сделать свой код более подходящим для вашего приложения и даже попытаться сделать так, чтобы он соответствовал вашему пространству имен. Я также не показал, где был создан новый холст и почему. Если у меня будет время, я постараюсь обновить его. Я рад, что это все равно помогло.
аюсь повернуть изображение вокруг центра. Обычно это работает с использованием RotateAnimation, но я хочу сделать это немного быстрее. Сейчас я использую шаблон SurfaceView с отдельным потоком рисования.
Это код, который правильно рисует растровое изображение (в зависимости от внешнего «заголовка»)
заголовок = угол в градусах, растровое изображение = растровое изображение, w = ширина растрового изображения, h = высота растрового изображения.
Matrix m = new Matrix();
m.preRotate(heading, w/2, h/2);
m.setTranslate(50,50);
canvas.drawBitmap(bitmap, m, null);
Недостаток: изображение представляет собой круг, а приведенный выше код создает видимые эффекты наложения ...
Код ниже также поворачивает изображение, но при вращении (скажем, от 0 до 45 градусов по часовой стрелке) центр нового изображения перемещается вниз / вправо. Полагаю, эксцентрический эффект обусловлен увеличенной шириной / высотой нового изображения. Однако этот код не создает псевдонимов, если установлен фильтр = true. Есть ли способ использовать код № 1, но иметь своего рода сглаживание или использовать код № 2, но избавиться от движения центра?
Matrix m = new Matrix();
m.preRotate(heading, w/2, h/2);
m.setTranslate(50,50);
Bitmap rbmp = Bitmap.createBitmap(bitmap, 0, 0, w, h, m, true);
canvas.drawBitmap(rbmp, 50, 50, null);
ОБНОВЛЕНИЕ: В результате обсуждения в этой теме правильная версия кода # 2 (сглаживаниеа также правильное вращение) будет выглядеть так (смещение 50,50 опущено):
Matrix m = new Matrix();
m.setRotate(heading, w/2, h/2);
Bitmap rbpm = Bitmap.createBitmap(bitmap, 0, 0, w, h, m, true);
canvas.drawBitmap(rbpm, (w - rbpm.getWidth())/2, (h - rbpm.getHeight())/2, null);
Благодарю.