2014-12-14 4 views
1

В моем приложении для Android у меня есть эта функция, которая создает новое растровое изображение из старого с помощью холста.Как изменить размер растрового изображения при рисовании на холсте?

private static Bitmap convert(Bitmap bitmap, Bitmap.Config config, int width, int height) { 
    Bitmap convertedBitmap = Bitmap.createBitmap(width, height, config); 
    Canvas canvas = new Canvas(convertedBitmap); 
    Paint paint = new Paint(); 
    paint.setColor(Color.BLACK); 
    canvas.drawBitmap(bitmap, 0, 0, paint); 
    bitmap.recycle(); 
    return convertedBitmap; 
} 

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

Я не хочу изменять размер растрового изображения, используя createScaledBitmap. Есть ли более быстрый способ?

ИЛИ Могу ли я сделать createScaledBitmap, но сделать его изменчивым одновременно? Это то, что я пытаюсь сделать в целом, изменить размер и сделать изменчивым в одно и то же время.

Благодаря

ответ

8

Вы можете позвонить public void drawBitmap (Bitmap bitmap, Rect src, RectF dst, Paint paint) для этой функции (Android Doc). Код ниже должен выполнить то, что вы пытаетесь сделать:

canvas.drawBitmap(bitmap, null, new RectF(0, 0, canvasWidth, canvasHeight), null); 
+0

Для параметров RectF требуются индексы x, y для левого, верхнего, правого и нижнего. Так разве это canvasWidth-1 и canvasHeight-1? – omega

+0

Подумайте об этом как о своем мониторе компьютера: при условии, что это FHD (1920x1080), когда вы хотите заполнить весь экран, вы можете рисовать от (0, 0) до (1920, 1080), а не (0, 0) - (1919 , 1079), здесь та же логика. – Kai

+0

Но это предполагает, что логика заключается в том, где она, но не включая эту длину. Но документация для нового RectF говорит 'Параметры: left Координата X левой части прямоугольника верхняя часть Координата Y верхней части прямоугольника правая Координата X правой части прямоугольника bottom Координата Y нижней части прямоугольника. – omega

Смежные вопросы