相关疑难解决方法(0)

在BufferedImage中快速加载和绘制RGB数据

在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)

java graphics bufferedimage

11
推荐指数
2
解决办法
1万
查看次数

标签 统计

bufferedimage ×1

graphics ×1

java ×1