Используя Canvas.drawBitmapMesh()
, я могу изменить изображение для имитации изменения перспективы, но способ изменения изображения является неожиданным.
Исходное изображение> Преобразованное изображение
>>>>> Преобразование «Один за другим» >>>> ![One by One Mesh](https://i.stack.imgur.com/hKWZ5.jpg)
canvas.drawBitmapMesh(myBitmap, 1, 1, fourPoints, 0, null, 0, null);
int[] fourPoints
соответствует размерам myBitmap, за исключением верхнеголевая точка смещена вправо, а верхняя правая точка смещена влево.
POINT: 768.0, 0.0
POINT: 2304.0, 0.0
POINT: 0.0, 2304.0
POINT: 3072.0, 2304.0
Обратите внимание, что на изображении справа вверху неожиданно появилось диагональное сгибание.Это, в отличие от изображения, которое я сгенерировал ниже (без использования Android Canvas drawBitmapMesh).
Ожидаемое преобразование:
![Expected](https://i.stack.imgur.com/61IrU.jpg)
Я назову ожидаемый выше результат преобразованием 'плавные линии' .
Увеличение сетки
Я попытался увеличить определенную сетку для преобразования до размера два на два.Это маскирует проблему, но проблема со сгибами все еще существует.
Сетка два на два
![Using a two by two mesh](https://i.stack.imgur.com/HACyN.jpg)
canvas.drawBitmapMesh(myBitmap, 2, 2, ninePoints, 0, null, 0, null);
int[] ninePoints
соответствует размерам myBitmap внизу, но остальные отрегулированы для создания трапеции.
POINT: 768.0, 0.0
POINT: 1536.0, 0.0
POINT: 2304.0, 0.0
POINT: 384.0, 1152.0
POINT: 1536.0, 1152.0
POINT: 2688.0, 1152.0
POINT: 0.0, 2304.0
POINT: 1536.0, 2304.0
POINT: 3072.0, 2304.0
С точки зрения кодирования, было бы без проблем продолжать увеличивать размермеш до тех пор, пока он не приблизится к результату «плавные линии», но кажется, что это приведет к потере процессора.Может быть, есть трюк , чтобы заставить эту функцию делать то, что я ожидаю, в отличие от диагональных линий сгиба?Так что мне интересно, был ли способ иметь по одному мешу и получить «плавные линии», которые могли бы быть более эффективными.