Java——BufferedImage对象

摘要:
宽度和高度表示像素数据的宽度和高度,字节数组r表示颜色分量g[]的RED值数组:字节数组g表示颜色分量b[]的GREEN值数组:直接调用BufferedImage BufferedImage的构造函数bi=新的BufferedImage(宽度,

BufferedImage对象中最重要的两个组件是Raster与ColorModel,分别用于存储图像的像素数据和颜色数据。

1、Raster对象的作用与像素存储

BufferedImage支持从Raster对象中获取任意位置(x,y)点的像素值p(x,y)

image.getRaster().getDataElements(x,y,width,height,pixels)

x,y表示开始的像素点,width和height表示像素数据的宽度和高度,pixels数组用来存放获取到的像素数据,image是一个BufferedImage的实例化引用。

2、图像类型与ColorModel

其实现类为IndexColorModel,IndexColorModel的构造函数有五个参数:分别为

Bits:表示每个像素所占的位数,对RGB来说是8位

Size:表示颜色组件数组长度,对应RGB取值范围为0~255,值为256

r[]:字节数组r表示颜色组件的RED值数组

g[]:字节数组g表示颜色组件的GREEN值数组

b[]:字节数组b表示颜色组件的BLUE值数组

3、BufferedImage对象的创建与保存

(1)创建一个全新的BufferedImage对象,直接调用BufferedImage的构造函数

BufferedImage  bi = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY)

其中width表示图像的宽度,height表示图像的高度,最后一个参数表示图像字节灰度图像

(2)根据已经存在的BufferedImage对象来创建一个相同的copy体

public BufferedImage createBufferedImage(BufferedImage src){

  ColorModel  cm = src.getColorModel();

  BufferedImage image = new BufferedImage(cm,

      cm.creatCompatibleWritableRaster(

      src.getWidth(),

      src.getHeight()),

      cm.isAlphaPremultiplied(), null);

  return image;

}

(3)通过创建ColorModel  和Raster对象实现BufferedImage 对象的实例化

public BufferedImage createBufferedImage(int width , int height, byte[] pixels){

  ColorModel   cm = getColorModel();

  SampleModel sm = getIndexSampleModel((IndexColorModel)cm, width,height);

  DataBuffer db = new DataBufferByte(pixels, width*height,0);

  WritableRaster raster = Raster.creatWritableRaster(sm, db,null);

  BufferedImage  image =  new BufferedImage (cm, raster,false, null);

  return image;

}

(4)读取一个图像文件

public BufferedImage readImageFile(File file)

{

  try{

    BufferedImage  image = ImageIo.read(file);

    return image;

  }catch(IOException e){

    e.printStrackTrace();

  }

  return null;

}

(5)保存BufferedImage 对象为图像文件

public void writeImageFile(BufferedImage  bi) throws IOException{

  File outputfile  = new File("save.png");

  ImageIO.write(bi,"png",outputfile);  

}

免责声明:文章转载自《Java——BufferedImage对象》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇JAVA适配器IE绝对定位元素神秘消失或被遮挡的解决下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

什么是应用程序根

简单来说,一个根是一个引用,这个引用指向堆上面的一个对象的。严格来说,一个根可以有以下几种情况:    (1) 指向全局对象的引用(尽管C#不支持,但CIL代码允许分配全局对象)   (2) 指向任何静态对象   (3) 指向一个应用程序代码中的局部对象   (4) 指向传入到一个函数中的对象参数   (5) 指向等待被终结(finalized)的对象  ...

Python面向对象(类和对象)

自从存在以来,Python一直是面向对象的语言。 因此,创建和使用类和对象是非常容易的。 本章将学习如何使用Python面向对象编程。如果您以前没有面向对象(OO)编程的经验,可能需要查阅介绍面向对象(OO)编程课程或至少学习一些有关教程,以便掌握基本概念。下面是面向对象编程(OOP)的一个小介绍,以帮助您快速入门学习 -OOP术语概述类 - 用于定义表示用...

iOS开发常用之 HUD 弹窗

HUD与吐司 MBProgressHUD - 最多人用的loading。 EBuyCommon - 1.基于MBProgressHUD实现得图形加载提示方式,及其标题方式提醒.2。弹窗。 SVProgressHUD - SVProgressHUD的加载,如果你需要定制化的等待提示器,这个就是了(也许是最好的)。 ProgressHUD - P...

【Bullet引擎】刚体类 —— btRigidBody

btRigidBody类主要用于刚体数据的计算。 在模拟刚体动画过程中,可以使用btRigidBody类获取所保存的刚体对象,进而控制刚体对象的旋转和位移。进行刚体模拟计算需要经常用到此类。 API:http://bulletphysics.org/Bullet/BulletFull/classbtRigidBody.html 创建刚体对象 btC...

JS-DOM样式操作

js样式操作 行内式样式操作 //行内式属性的获取 let value = 元素对象.style.属性名; //得到的值为String类型,如果要做算术运算需要转型 //仅能得到行内式属性的值,对于嵌入式、外联式的值无法获取 //属性名需要注意如果在css中唯一个单词则是原单词,如果在css中为多个单词则遵守驼峰命名法...

Java属性中指定Json的属性名称(序列化和反序列化)

序列化对象,只需要使用注解"@JsonProperty(value = "pwd")" import com.fasterxml.jackson.annotation.JsonProperty; public class User{ @JsonProperty(value = "pwd") private String passw...