如何决定使用哪种BufferedImage图像类型?

use*_*460 10 java bufferedimage

Java BufferedImage类有一长串类变量,称为图像类型,可用作BufferedImage构造函数的参数.

但是,Java文档对这些图像类型的用途做了最小的解释,它将如何影响要创建的BufferedImage.

我的问题是:

  1. 图像类型如何影响要创建的BufferedImage?它是否控制用于存储各种颜色(红色,绿色,蓝色)的位数及其透明度?

  2. 如果我们只想创建,我们应该使用哪种图像类型

    • 不透明的图像
    • 一个透明的图像
    • 半透明的图像

我多次阅读Java Doc中的描述,但是我们不知道应该如何使用它.例如,这一个:

TYPE_INT_BGR

表示具有8位RGB颜色分量的图像,对应于Windows或Solaris样式的BGR颜色模型,其中颜色为蓝色,绿色和红色打包为整数像素.没有阿尔法.该图像具有DirectColorModel.当具有非不透明alpha的数据存储在此类型的图像中时,必须将颜色数据调整为非预乘形式并丢弃alpha,如AlphaComposite文档中所述.

Jac*_*ack 13

除非您有特定要求(例如保存内存或保存计算或特定的原生像素格式),否则请使用默认值TYPE_INT_ARGB,每个通道有8位,3个通道+ alpha.

当使用每通道8位时跳过alpha通道不会影响图像占用的总内存,因为int在任何情况下每个像素都将被打包,因此将丢弃8位.

基本上你有:

  • TYPE_INT_ARGB,alpha通道每像素4个字节
  • TYPE_INT_ARGB_PRE,每像素4个字节,与之前相同,但颜色已经乘以像素的alpha值以节省计算量
  • TYPE_INT_RGB,每个像素4个字节,没有alpha通道
  • TYPE_USHORT_555_RGB并且TYPE_USHORT_565_RGB,每个像素2个字节,更少的颜色,除非你有内存限制,否则不需要使用它

然后有所有相同类型的格式与交换渠道(例如,BGR相反RGB).您应该选择平台的本机,以便减少转换.