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

2022-09-04 02:09:39

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

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

我的问题是:

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

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

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

我多次阅读Java文档中的描述,但就是无法弄清楚我们应该如何使用它。例如,这个:

TYPE_INT_BGR

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


答案 1

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

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

基本上你有:

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

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


答案 2

推荐