SWT 图像 —— 简介

Java Image的文章中应用的原文有:

http://www.ibm.com/developerworks/cn/opensource/os-cn-swtimage/

http://www.eclipse.org/articles/Article-SWT-images/graphics-resources.html

http://www.ibm.com/developerworks/cn/opensource/os-swt/

http://www.chineselinuxuniversity.net/articles/22080.shtml

http://www.ibm.com/developerworks/cn/java/j-2dswt/

http://www.roboticfan.com/blog/user_2005/104/archives/2009/200917105534.shtml#

 

写这些,并没有增加多少新的内容,就当自己的读书笔记吧。

 

SWT Image的简介:

 

软件开发人员可以利用 SWT 封装的 Image, ImageData 等类来创建图像、存储图像数据,也可以对存储的图像数据进行各种图像变换。本文将演示如何正确的使用 Image, ImageData 等类,以及如何使图像变灰、变亮/黑、图像旋转、图像拉伸、图片透明叠加、图片反色等相关问题。

下面就来介绍一下 Image 和 ImageData 这两个在 SWT Images 中最重要的类。

类 org.eclipse.swt.graphics.Image 被用来表示可以在设备上显示的图片,可以用方法如GC.drawImage() 或者 Button.setImage() 等来将它显示出来。Image 类提供了几个构造函数,可以完成以下功能:

· 装载一个现有的图象。可以通过传入文件名或者 InputStream 作为参数,但是图象的格式必须是它所支持的格式之(目前 SWT Image 支持 BMP、GIF、JPG、PNG、Windows ICO 等格式)一,否则会抛出 SWTException 异常。

· 构造一个用已经存在的 ImageData 进行初始化的图像。

· 构造一个空图像。可以通过修改其像素值或者向它拷贝一个 SWT 图形上下文的内容 (GC) 来绘制该图像,并且可以指定空图像的大小。

类 org.eclipse.swt.graphics.ImageData 中存储了图像的像素数据信息。 ImageData 是一个包含有关图像大小、调色板、颜色值和透明度等信息的类。我们可以对这些图像像素数据可以直接读或者写操作,这意味着可以通过直接读取或者修改图像的数据,来设置或者取得图像中任何像素或者任何一组像素的颜色值。关于 ImageData ,我们还应当了解以下一些字段:

· width 和 height 指定图像的宽和高。Depth 指定图像的颜色深度。可能的值为 1、2、4、8、16、24 或者 32,指定编码每一个像素的值所使用的比特数【注意是比特数,也就是说深度是8的,一个字节就可以表示一个像素点了,深度是24需要8个字节。颜色深度是8,说明一个像素点有256种颜色,深度为24,一个像素点有256*256*256种颜色】

· alpha 与 alphaData 定义图像的透明度。alpha 定义了图象的全局透明度值,默认值为 -1,否则 alphaData 域将被忽略。当 alpha 不等于 -1 时, alphaData 存储了图象的透明度缓冲区,每个像素可以有一个在 0~255 之间的透明度值,数值越大,表示越不透明。值得注意的是,只有部分图象格式具有透明度,例如 GIF 和 PNG。

· palette 包含一个 PaletteData 对象,它存储有关图像的颜色模型的信息。SWT 的颜色模型可以是索引或者直接的,由其域 isDirect 来指定。如果颜色模型是索引的,那么 PaletteData 包含颜色索引,可以通过方法 getRGBs() 来获取 RGB 信息。如果它是直接的,那么它包含转换信息,表明应当如何从像素的整数值中提取出颜色 RGB 成分。【1位2种可能,2位4种可能,4位16种,8位256种,16位65536种,24为。。。。这样8位和以下采用索引还行,建一个256的RGB数组,16、24、32需要建的数组就太大了】【直接的,怎么提取呢?】

· data 包含像素值的字节缓冲区。字节编码的方法取决于所使用的颜色深度。对于一个 8 位的图像,数组中的一个字节正好表示图像中一个像素的值。对于 16 位图像,每一个像素值编码为缓冲区中的两个字节。这两个字节以最低有效字节顺序存储【这是为了和Window内部是这么储存的】。对于 24 或者 32 位图像,每一个像素值以最高有效位字节顺序编码为缓冲区中的三个或者四个字节。

· bytesPerLine 表明缓冲区中有多少字节用于表示图像中一行像素的所有像素值。由于一个像素可能有多个字节表示,所以 bytesPerLine 可能是字段 width 值的若干倍。

 

To have a higher color depth (such as 16, 24, or 32) a direct palette must be used. 

以为16为的话,如果用index的方式的palette的话,里面要建一个65536大的。

 

2^08 0,000,000,256

2^16 = 0,000,065,536

2^24 = 0,016,777,216

2^32 = 4,294,967,296

 

所以索引图像的最高深度是8。palette中存256种颜色的数组。这样的话也就是说理论上16*16=256或则小的图片是一定能够用索引图像来表示。

<!--EndFragment-->

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值