Android Scaling Canvas Bitmap

У меня есть приложение для рисования, которое позволяет пользователю рисовать на пустом холсте. Я пытаюсь нарисовать масштабированный «эскиз» текущего растрового изображения, чтобы, когда пользователь масштабировал в представлении, он мог ссылаться на эскиз, чтобы получить представление о том, где они находятся на общем холсте рисования. У меня работает масштабирование, и я показываю эскиз в правильном месте, но похоже, что эскиз не обновляется при последующих onDraws, когда добавляются новые линии / фигуры.

Так что у меня есть доступ к базовому растровому изображению для это представление (чтобы показать миниатюру, иметь возможность легко сохранить растровое изображение в файл и т. д.), я делаю следующее в onSizeChanged () для представления:

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);

    // set the canvas height, panning, etc, based on the now inflated View
    mWidth      = getWidth();
    mHeight     = getHeight();
    mAspectRatio    = mWidth / mHeight;
    mPanX       = 0;
    mPanY       = 0;

    // create the Bitmap, set it to the canvas
mBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
mCanvas.setBitmap(mBitmap);
draw(mCanvas);
}

Затем, когда пользователь рисует и вызывается invalidate (), я сделайте следующее в onDraw () для создания эскиза:

@Override
protected void onDraw(Canvas canvas) {
    

    if (mScaled) {
        Bitmap out = Bitmap.createScaledBitmap(mBitmap, (int) thumbWidth, (int) thumbHeight, false);
        canvas.drawBitmap(out, null, thumbnailRectF, thumbCanvasPaint);
    }
}

Миниатюра отображается в пространстве, определенном функцией thumbnailRectF с помощью thumbCanvasPaint, но в последующих вызовах onDraw () масштабированное растровое изображение не изменилось по сравнению с исходным состоянием, даже несмотря на то, что полноразмерный активный холст показывает все рисунки, и т. д. На основании некоторых тестов мне кажется, что пока я устанавливаю Bitmap с помощью начального вызова draw (mCanvas);, последующие onDraws записывают в базовый Bitmap, а не в тот, который указан в onSizeChanged ().

Итак, я думаю, я пытаюсь выяснить, как связать холст onDraw с растровым изображением, к которому я могу получить доступ для изменения размеров, сохранения и т. Д. Глядя на этот вопрос , я подумал, что рисование (mCanvas); вызов привяжет onDraw к растровому изображению, указанному в mCanvas (в моем случае, mBitmap), но на практике он, похоже, не работает, что касается обновлений холста.

Спасибо,

Пол

5
задан Community 23 May 2017 в 10:30
поделиться