我目前正在尝试仅绘制BufferedImage的一部分,该部分在飞行中处于Rectangle的范围内。图像被移动,因此矩形中图像的大小发生了变化。
视觉描绘:
目前,这就是我所拥有的,并且在低分辨率图像下效果很好。但是如果我放大小地图,这将变得效率很低并且会导致滞后
private BufferedImage extractPixels() {
int[] imagePixels = new int[scaledImage.getWidth() * scaledImage.getHeight()];
scaledImage.getRGB(0,scaledImage.getWidth(),scaledImage.getHeight(),imagePixels,scaledImage.getWidth());
int maxX = 0,maxY = 0;
boolean first = false;
for (int y = 0; y < scaledImage.getHeight(); y++) {
for (int x = 0; x < scaledImage.getWidth(); x++) {
int px = (int)(this.x + x);
int py = (int)(this.y + y);
if (viewingArea.contains(px,py)) {
if (x > maxX) maxX = x;
if (y > maxY) maxY = y;
if (!first) {
imageX = x;
imageY = y;
first = true;
}
}
}
}
int xCount = maxX - imageX;
int yCount = maxY - imageY;
if (imageX < 0 || imageX > scaledImage.getWidth() || imageX + xCount > scaledImage.getWidth()) return null;
if (imageY < 0 || imageY > scaledImage.getHeight() || imageY + yCount > scaledImage.getHeight()) return null;
return scaledImage.getSubimage(imageX,imageY,xCount,yCount);
}
在渲染循环中:
public void Render(PixelRenderer renderer) {
BufferedImage image = extractPixels();
if (image != null) renderer.renderImage(image,x + imageX,y + imageY);
}
是否有一种方法可以更有效地执行此操作,以便重新缩放对性能的影响较小?