У меня есть представление для редактирования изображений, которое расширяет ImageView
.setImageBitmap()
вызывается извне на ImageView
.Пользователь может рисовать линии в этом представлении, которое будет отображаться поверх растрового изображения, установленного в ImageView.
Моя цель - получить измененное растровое изображение после прорисовки линии, , которое будет использоваться для сравнения пикселей для создания различий с исходным растровым изображением. Вот код для рисования:
public class MyImageView extends ImageView{
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint p = new Paint(Paint.ANTI_ALIAS_FLAG);
canvas.drawLine(0, 0, 20, 20, p); //dynamic values in app
}
}
Предложенный подход к другим сообщениям заключается в использовании getDrawingCache()
, который возвращает bitmap
, возвращая «снимок» ImageView
и, следовательно, измененный bitmap
.В дополнение к тому факту, что метод устарел сейчас, он не учитывает исходное разрешение растрового изображения, , поэтому я не могу сделать попиксельное сравнение с исходным bitmap
.Например, если мое исходное растровое изображение имеет размер 2x4 в ImageView с match_parent
шириной и высотой и adjustViewBounds
, установленным в значение true, getDrawingCache()
возвращает растровое изображение размером 1020x1440
.Возможно, я могу масштабировать измененное растровое изображение до размера растрового изображения, но не уверен, потеряю ли я важные данные в зависимости от плотности устройства.
Я также должен добавить важный нюанс.Мой ImageView
имеет match_parent
ширина / высота с adjustViewBounds
true и scaleType
как fitCenter
, чтобы сохранить соотношение сторон и центрировать изображение соответствующим образом.