【发布时间】:2017-07-01 10:36:56
【问题描述】:
我在 Java 中有一个完全不饱和的BufferedImage,我需要每秒多次显示到 JFrame,但是,在渲染之前,图像需要用某种色调饱和。我面临的问题是,我不知道有任何方法能够在性能方面足够快,以便能够在色调每帧发生变化时提供平滑的帧速率。
我尝试在渲染过程中生成具有所需色调值的图像,但除非图像非常小,否则会导致帧速率变慢。我还尝试缓存一堆饱和图像并为每一帧选择一个,但只有 256 个缓存图像会导致加载时间非常长。
图像的大小可能在1000x500 像素左右。
我目前必须为图像重新着色的代码如下:
private BufferedImage recolored(BufferedImage image, float hue) {
int width = image.getWidth();
int height = image.getHeight();
WritableRaster raster = image.getRaster();
BufferedImage res = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
WritableRaster resRast = res.getRaster();
for (int xx = 0; xx < width; xx++) {
for (int yy = 0; yy < height; yy++) {
Color color = new Color(Color.HSBtoRGB(hue, 0.7f, 0.7f));
int[] pixels = raster.getPixel(xx, yy, (int[]) null);
pixels[0] = color.getRed();
pixels[1] = color.getGreen();
pixels[2] = color.getBlue();
resRast.setPixel(xx, yy, pixels);
}
}
return res;
}
所以,我的问题是:
- 为了显示具有不断变化的色调的图像,标准、普遍接受或最佳方式是什么?
- 用我这种尺寸的图片这样做是否合理?
另外,我怀疑它是否重要,但色调会随着时间的推移呈线性变化,并在溢出后回到零。基本上它会循环遍历所有颜色,然后重复。
【问题讨论】:
-
1) 不要要求“最好”的东西。 best 什么都不说,对每个人都有不同的意义。 2)如果您想要快速的东西,您需要指定“每秒多次”的含义以及您正在运行软件的机器......
-
@Piglet 谢谢,我以后会尝试这样做。
标签: java performance image-processing bufferedimage