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

前端之家收集整理的这篇文章主要介绍了java – 如何决定使用哪种BufferedImage图像类型?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
Java BufferedImage类有一长串类变量,称为图像类型,可用作BufferedImage构造函数的参数.

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

我的问题是:

>图像类型如何影响要创建的BufferedImage?它是否控制用于存储各种颜色(红色,绿色,蓝色)的位数及其透明度?
>如果我们只想创建,我们应该使用哪种图像类型

>不透明的图像
>透明的图像
>半透明的图像

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

TYPE_INT_BGR

Represents an image with 8-bit RGB color components,corresponding to a Windows- or Solaris- style BGR color model,with the colors Blue,Green,and Red packed into integer pixels. There is no alpha. The image has a DirectColorModel. When data with non-opaque alpha is stored in an image of this type,the color data must be adjusted to a non-premultiplied form and the alpha discarded,as described in the AlphaComposite documentation.

解决方法

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

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

基本上你有:

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

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

猜你在找的Java相关文章