почему разные результаты с использованием матрицы для просмотра изображения и растрового изображения?

зачем использовать матрицу с ImageView setImageMatrix(matrix) и Bitmap.createBitmap(bmp, 0, 0, bmp.width(), bmp.height(), matrix, true); дают разные результаты?

вариант 1. использование setImageMatrix(matrix); он работает правильно, только я setLayoutParams(deviceWidth,deviceHeight); это означает, что размер drawable может быть меньше размера ImageView, так как вы можете видеть, что setBackgroundColor(Color.RED) рисует весь экран, в то время как мне нужен ImageView с точными размерами, которые можно рисовать, но когда я использую setLayoutParams() с размерами соответствующий размер растрового изображения, растровое изображение обрезается, вы можете видеть изображение, где я отображаю ImageView с параметрами deviceSize-layoutParams и bitmapSize-layoutParams, это моя матрица Matrix {[1.8266667, 0.0, 110.0][0.0, 1.3733333, 117.000015][0.0, 0.0, 1.0]}

private void drawBitmap() {
    imageView = new ImageView(this);
    imageView.setLayoutParams(new ViewGroup.LayoutParams(deviceWidth, deviceHeight));
    imageView.setBackgroundColor(Color.RED);
    imageView.setScaleType(ImageView.ScaleType.MATRIX);
    Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.image4);

    Matrix matrix = loadMatrix(bmp);
    RectF viewRect = new RectF(0, 0, deviceWidth, deviceHeight);
    RectF imageRect = new RectF(0, 0, bmp.getWidth(), bmp.getHeight());
    matrix.setRectToRect(imageRect, viewRect, Matrix.ScaleToFit.START);
    imageView.setImageMatrix(matrix);
    imageView.setImageBitmap(bmp);
    setContentView(imageView);
}

Я получаю результат, отображаемый во 2-й части изображения, в то время как мне нужно преобразовать ImageView, как отображается только в 1-й части, не занимая весь экран, в то время как я получаю такой результат, комментируя эту строку matrix.setRectToRect(imageRect, viewRect, Matrix.ScaleToFit. НАЧАЛО); введите здесь описание изображения

при использовании параметров 2_nd проблем с layoutParams нет, хотя он каким-то образом обрезает ImageView и не отображает полностью

матрица включает данные, которые должны масштабироваться и преобразовываться в ImageView

Мне нужно одно из правильных решений, преобразованное ImageView с размером для рисования. Я имею в виду, что ImageView должен занимать (или сенсорная область ImageView) как часть для рисования.

   Bitmap targetBitmap = Bitmap.createBitmap((source.getWidth()),
            (source.getHeight()),
            Bitmap.Config.ARGB_8888);
    Paint p = new Paint();
    p.setAntiAlias(true);
    p.setDither(true);
    p.setFilterBitmap(true);
    RectF rectF = new RectF(0, 0, source.getWidth(), source.getHeight());
    matrix.mapRect(rectF);

    targetBitmap = Bitmap.createBitmap((int) rectF.width(), (int) rectF.height(), Bitmap.Config.ARGB_8888);

    Canvas tempCanvas = new Canvas(targetBitmap);
    tempCanvas.drawBitmap(source, matrix, p);
    if (targetBitmap != source) {
        source.recycle();
    }
return targetBitmap;

person I.S    schedule 28.05.2015    source источник
comment
Пытаюсь понять. wrap_content означает, что ImageView будет размером с изображение, но вы говорите о масштабировании изображения. Пожалуйста, отредактируйте свой вопрос, чтобы больше рассказать о том, чего именно вы пытаетесь достичь. Совсем недавно я много работал с масштабированием по матрице в ImageView, поэтому хорошо знаком с тем, как это работает. Один совет, который я могу вам дать, - убедиться, что ImageView запустил onLayout(), иначе у ImageView не будет ширины и высоты, которые вам нужны для настройки матрицы.   -  person kris larson    schedule 29.05.2015
comment
Предположим, размер ImageView был задан с помощью match_parent, а для вашего растрового изображения был установлен размер, покрывающий весь ImageView, и вы могли увеличивать масштаб, но когда вы уменьшали масштаб, растровое изображение никогда не станет меньше, чем ImageView, будет ли это работать для вас?   -  person kris larson    schedule 29.05.2015


Ответы (1)


person    schedule
comment
Уважаемый @kris larson, я отредактировал свой вопрос и изменил скриншот, и я использовал ваш опубликованный код, но я не смог получить правильный результат. - person I.S; 30.05.2015
comment
он не вносит никаких изменений :( - person I.S; 31.05.2015