Как блитировать () в андроиде?

Я используюсь для обработки графики с олдскульными библиотеками (аллегро, GD, pygame), где, если я хочу скопировать часть битового массива в другого... Я просто использую копирование битового массива.

Я пытаюсь выяснить, как сделать это в андроиде, и я стал очень смущенным. Так... у нас есть они Холст, которые только для записи, и Битовые массивы, которые только для чтения? Кажется слишком глупым быть реальным, должно быть что-то, что я пропускаю, но я действительно не могу понять это.

править: чтобы быть более точным..., если битовые массивы только для чтения, и холст, только для записи, я не могу блитировать в B, и затем B в C?

14
задан o0'. 21 April 2010 в 14:29
поделиться

2 ответа

Код для копирования одного растрового изображения в другой выглядит следующим образом:

Rect src = new Rect(0, 0, 50, 50); 
Rect dst = new Rect(50, 50, 200, 200);  
canvas.drawBitmap(originalBitmap, src, dst, null);

Он указывает, что вы хотите скопировать верхний левый угол (50x50) растрового изображения, а затем растянуть его в растровое изображение 150x150 и записать его со смещением 50 пикселей от левый верхний угол холста.

Вы можете запускать рисование с помощью invalidate (), но я рекомендую использовать SurfaceView, если вы делаете анимацию. Проблема с invalidate заключается в том, что он отрисовывается только тогда, когда поток переходит в режим ожидания, поэтому вы не можете использовать его в цикле - он будет рисовать только последний кадр. Вот несколько ссылок на другие вопросы о графике, на которые я ответил, они могут быть полезны, чтобы объяснить, что я имею в виду.


В ответ на комментарии вот дополнительная информация: {{1} } Если вы получаете Canvas из SurfaceHolder.lockCanvas (), то я не думаю, что вы можете скопировать остаточные данные, которые были в нем, в Bitmap. Но этот элемент управления предназначен не для этого - вы используете только тогда, когда вы все разобрали и готовы рисовать.

Что вы хотите сделать, так это создать холст, который преобразуется в растровое изображение, используя

Canvas canvas = new Canvas(yourBitmap)

. Затем вы можете выполнять любые преобразования и операции рисования, какие захотите. yourBitmap будет содержать всю самую свежую информацию. Затем вы используете держатель поверхности следующим образом:

Canvas someOtherCanvas = surfaceHolder.lockCanvas()
someOtherCanvas.drawBitmap(yourBitmap, ....)

Таким образом, вы всегда получаете свой Bitmap, в котором содержится вся информация, которую вы пытаетесь сохранить.

17
ответ дан 1 December 2019 в 13:58
поделиться

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

@Override
public void onDraw(Canvas canvas) {
    // Draw a bitmap to the canvas at 0,0
    canvas.drawBitmap(mBitmap, 0, 0, null);
    // Add in your drawing functions here
    super.onDraw(canvas);
    // Call invalidate to draw to screen
    invalidate();
}

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

-1
ответ дан 1 December 2019 в 13:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: