Используя Canvas.drawBitmapMesh()
, я могу изменить изображение для имитации изменения перспективы, но способ изменения изображения является неожиданным.
Исходное изображение> Преобразованное изображение
>>>>> Преобразование «Один за другим» >>>>
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).
Ожидаемое преобразование:
Я назову ожидаемый выше результат преобразованием 'плавные линии' .
Увеличение сетки
Я попытался увеличить определенную сетку для преобразования до размера два на два.Это маскирует проблему, но проблема со сгибами все еще существует.
Сетка два на два
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
С точки зрения кодирования, было бы без проблем продолжать увеличивать размермеш до тех пор, пока он не приблизится к результату «плавные линии», но кажется, что это приведет к потере процессора.Может быть, есть трюк , чтобы заставить эту функцию делать то, что я ожидаю, в отличие от диагональных линий сгиба?Так что мне интересно, был ли способ иметь по одному мешу и получить «плавные линии», которые могли бы быть более эффективными.