2017-02-09 11 views
1

Мне удалось масштабировать растровое изображение.Центр в холсте масштабированный растровый рисунок внутри публичной пустоты onDraw (холст-холст)

Rect src = new Rect(0, 0, icon.getWidth() - 1, icon.getHeight() - 1); 
Rect dest = new Rect(0,0,Math.round(newWidth), Math.round(newHeight)); 
canvas.drawBitmap(icon, src, dest, null); 

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

canvas.drawBitmap(icon, src, dest, null); 

Как это сделать?

ответ

0

Если вы хотите, чтобы изображение было сосредоточено на Canvas, просто вычислите координату центра и примените его на dest.

int cx = (getWidth() - newWidth)/2; 
int cy = (getHeight() - newHeight)/2; 

Rect src = new Rect(0, 0, myBitmap.getWidth() - 1, myBitmap.getHeight() - 1); 
Rect dest = new Rect(cx, cy, cx+Math.round(newWidth), cy+Math.round(newHeight)); 
canvas.drawBitmap(myBitmap, src, dest, null); 

Однако, это не правильный способ сделать это, потому что вы создаете 2 Rect каждый раз onDraw(Canvas) называется. Что остается в памяти, пока gc-мусор собирает его.

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

+0

Хорошо, я попробую – Badulake

+0

вы удивительный – Badulake

+0

Спасибо за комплимент. –