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

时间:2015-09-05 15:13:57

标签: java bufferedimage

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

但是,Java文档对这些图像类型的用途进行了极少的解释,以及它将如何影响要创建的BufferedImage。

我的问题是:

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

  2. 如果我们只是想创建

    ,我们应该使用哪种图像类型
    • 不透明的图片
    • 透明图片
    • 半透明图片
  3. 我多次阅读Java Doc中的描述,但我们无法弄清楚应该如何使用它。例如,这一个:

      

    TYPE_INT_BGR

         

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

1 个答案:

答案 0 :(得分:9)

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

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

基本上你有:

  • TYPE_INT_ARGB,每个像素4个字节,带alpha通道
  • TYPE_INT_ARGB_PRE,每像素4个字节,与之前相同,但颜色已经乘以像素的alpha值以节省计算
  • TYPE_INT_RGB,每个像素4个字节,没有Alpha通道
  • TYPE_USHORT_555_RGBTYPE_USHORT_565_RGB,每个像素2个字节,颜色少得多,除非您有内存限制,否则不需要使用它

然后,所有类型的格式都有交换频道(例如。BGR而不是RGB)。您应该选择平台的本机,以便减少转换。