В настоящее время я выполняю проект, который требует, чтобы я рисовал на экране большое количество изображений (100+). Первоначальное разрешение каждого изображения составляет 20 * 20, и я масштабирую их до 80 * 80 с ближайшим соседом, прежде чем рисовать их.Рисование Увеличенные изображения
В настоящее время я использую AffineTransform, чтобы масштабировать их при инициализации программы и перерисовывать увеличенные изображения в каждом кадре в разных положениях.
Увидев, что целевая частота кадров составляет около 60 кадров в секунду, мне нужно найти способ сделать их быстрее, желательно, чтобы они не отображали их как 80 * 80 битмапов. Я попробовал метод drawImage Graphics2D с параметрами ширины и высоты, но это фактически замедляло мою программу.
В псевдокоде:
Image image; //loaded from 20*20 png file
public void init(){
image = resize(image, 80, 80);
}
public void repaint(Graphics g){
g.drawImage(image, 0, 0, null);
}
Я также попытался:
Image image;
public void repaint(Graphics g){
((Graphics2D)g).setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
g.drawImage(image, 0, 0, 80, 80, null);
}
Есть ли решение моей проблемы?
Кэш всех масштабированных изображений ** один раз **, затем нарисуйте эти изображения – BitNinja