Я хочу сделать постобработку в своем фото-приложении и хочу иметь возможность печатать / отображать представление Android в растровом изображении. Проблема в том, что изображение можно масштабировать, поворачивать и перемещать. Так вот результаты:
1) изображение (сетка с монетой) и вид Android (прямоугольник «ТЕСТ» поверх него, вложенный в FrameLayout)
2) Я взял растровое изображение и распечатал его на растровое изображение. Как видите, позиция зеленого прямоугольника уже не такая, как в 1)
3) это тоже картинка и вид сверху
4) и как вы можете видеть положение прямоугольника так же, как на 3) (потому что не было масштабирования и вращения, только перемещение)
![Bitmap 2](https://i.stack.imgur.com/I81HU.jpg)
Вот код:
val childView = editTextsContainer.getChildAt(i)
val viewBitmap = Bitmap.createBitmap(childView.measuredWidth, childView.measuredHeight, Bitmap.Config.ARGB_8888)
val canvas = Canvas(viewBitmap)
childView.draw(canvas)
val relativeX = childView.x / editTextsContainer.width
val relativeY = childView.y / editTextsContainer.height
val relativePivotX = childView.pivotX / editTextsContainer.width
val relativePivotY = childView.pivotY / editTextsContainer.height
Здесь я беру значения из поля зрения и печати растровых изображений вместе:
val canvas = Canvas(originalImage)
val originWidth = originalImage.width
val originHeight = originalImage.height
val deltaScaleX = originWidth.toFloat() / postProcessData.containerWidth
val deltaScaleY = originHeight.toFloat() / postProcessData.containerHeight
for (bitmapInfo in postProcessData.bitmapsInfoList) {
val scaleX = deltaScaleX * bitmapInfo.scaleX
val scaleY = deltaScaleY * bitmapInfo.scaleY
val pivotX = bitmapInfo.relativePivotX * originWidth
val pivotY = bitmapInfo.relativePivotY * originWidth
val x = bitmapInfo.relativeX * originWidth //+ bitmapInfo.bitmap.width * scaleX * cos(bitmapInfo.rotation)
val y = bitmapInfo.relativeY * originHeight //+ bitmapInfo.bitmap.height * scaleY * cos(bitmapInfo.rotation)
val matrix = Matrix().apply {
this.postRotate(bitmapInfo.rotation, pivotX, pivotY)
this.postScale(scaleX, scaleY)
this.postTranslate(x, y)
}
canvas.drawBitmap(bitmapInfo.bitmap, matrix, null)
Я использую «относительные» значения, которые вызывают представление Android, и его растровое изображение находится в разных системах координат, например, структура кадра, в которую вложен зеленый прямоугольник, имеет размеры 1080/1040, а фотография, где я печатаю растровое изображение, имеет Width = 1944 и высота = 2592.
Так что я делаю не так? Мне кажется, я что-то пропустил ...
Спасибо всем заранее!