Я пытаюсь вручную получить изображение внутри изображения по центру и подгонять к экрану. Мне нужно сделать это с матрицей (позже я буду динамически менять матричное преобразование).
Проблема в том, что я не могу выровнять изображение по центру изображения (соответствующий масштаб). Вот код:
// Compute the scale to choose (this works)
float scaleX = (float) displayWidth / (float) imageWidth;
float scaleY = (float) displayHeight / (float) imageHeight;
float minScale = Math.min(scaleX, scaleY);
// tx, ty should be the translation to take the image back to the screen center
float tx = Math.max(0,
0.5f * ((float) displayWidth - (minScale * imageWidth)));
float ty = Math.max(0,
0.5f * ((float) displayHeight - (minScale * imageHeight)));
// Compute the matrix
Matrix m = new Matrix();
m.reset();
// Middle of the image should be the scale pivot
m.postScale(minScale, imageWidth/2, imageHeight/2);
// Translate
m.postTranslate(tx, ty);
imageView.setImageMatrix(m);
Приведенный выше код работает, если я не центрирую масштаб по центру изображения (но мне нужно будет сделать это позже, поэтому мне нужно выяснить формулу сейчас).
Я думал, что выполнение следующих действий решит проблему, но изображение все еще смещено (по направлению вниз и вправо).
tx += 0.5*imageWidth*minScale;
ty += 0.5*imageHeight*minScale;
Некоторые значения у меня есть:
- изображение: 200x133
- дисплей: 800x480
- minScale: 2,4
- последний левый верхний угол изображения: 100, 67 (должно быть 17, 0)