Java BufferedImage类有一长串的类变量列表,称为图像类型,可用作BufferedImage构造函数的参数。
但是,Java文档对这些图像类型的用途进行了极少的解释,以及它将如何影响要创建的BufferedImage。
我的问题是:
图像类型如何影响要创建的BufferedImage?它是否控制用于存储各种颜色(红色,绿色,蓝色)的位数及其透明度?
如果我们只是想创建
,我们应该使用哪种图像类型我多次阅读Java Doc中的描述,但我们无法弄清楚应该如何使用它。例如,这一个:
TYPE_INT_BGR
表示具有8位RGB颜色分量的图像,对应于Windows或Solaris样式的BGR颜色模型,蓝色,绿色和红色填充为整数像素。没有阿尔法。该图像具有DirectColorModel。当具有非不透明alpha的数据存储在此类型的图像中时,必须将颜色数据调整为非预乘形式并丢弃alpha,如AlphaComposite文档中所述。
答案 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_RGB
和TYPE_USHORT_565_RGB
,每个像素2个字节,颜色少得多,除非您有内存限制,否则不需要使用它然后,所有类型的格式都有交换频道(例如。BGR
而不是RGB
)。您应该选择平台的本机,以便减少转换。