在Windows上运行的一些Java代码中,我正在从磁盘读取一些大块RGB数据,并希望尽快将其显示在屏幕上.RGB数据是每通道8位,没有任何alpha.目前我有以下代码来创建BufferedImage.
BufferedImage getBufferedImage(File file, int width, int height) {
byte[] rgbData = readRGBFromFile(file);
WritableRaster raster = Raster.createInterleavedRaster(
rgbData, width, height,
width * 3, // scanlineStride
3, // pixelStride
new int[]{0, 1, 2}, // bandOffsets
null);
ColorModel colorModel = new ComponentColorModel(
ColorSpace.getInstance(ColorSpace.CS_sRGB),
new int[]{8, 8, 8}, // bits
false, // hasAlpha
false, // isPreMultiplied
ComponentColorModel.OPAQUE,
DataBuffer.TYPE_BYTE);
return new BufferedImage(colorModel, raster, false, null);
}
Run Code Online (Sandbox Code Playgroud)
问题是将此渲染到屏幕的性能非常慢.大约250 - 300毫秒.我已经读过,为了获得最佳性能,您需要在与屏幕兼容的BufferedImage中显示.为此,我将从上述方法返回的缓冲图像传递给这样的方法.
BufferedImage createCompatibleImage(BufferedImage image)
{
GraphicsConfiguration gc = GraphicsEnvironment.
getLocalGraphicsEnvironment().
getDefaultScreenDevice().
getDefaultConfiguration();
BufferedImage newImage = gc.createCompatibleImage( …Run Code Online (Sandbox Code Playgroud)